问题描述
我使用https://django-rest-framework-simplejwt.readthedocs.io/en/latest/
User = get_user_model()
class Profile(models.Model):
user = models.OnetoOneField(User,on_delete=models.CASCADE)
bio = models.TextField()
ROLE_CHOICES = [
('U','User'),('M','Moderator'),('A','Admin'),]
role = models.CharField(max_length=1,choices=ROLE_CHOICES,default='U')
confirmation_code = models.CharField(max_length=30)
我想获得 JWT 令牌,这是我的网址
path("v1/token/",views.EmailTokenObtainPairView.as_view(),name="token_obtain_pair")
我需要发送这样的 POST 查询
http://127.0.0.1:8000/api/v1/token/
有数据:
{ 'email': email,'confirmation_code': confirmation_code }
但默认情况下,在 simple-jwt 中我需要发送数据:
{'username' : username,'password':password }
在我的 serializer.py 中
class CustomTokenObtainPairserializer(TokenObtainPairserializer):
username_field = User.EMAIL_FIELD
在我的views.py中
class EmailTokenObtainPairView(TokenObtainPairView):
serializer_class = CustomTokenObtainPairserializer
我已经更改了电子邮件中的用户名,但是我无法在confirmation_code 上更改密码
如何更改默认方式?
解决方法
您可以覆盖 TokenObtainSerializer 进行自定义。
对于您的情况,您需要自定义方法 d1 = {'a': 5,'b': 8,'c': 5}
d2 = {'a': 9,'b': 4,'c': 7}
d = {k:min(v,d2[k]) for k,v in d1.items()}
print(d)
# {'a': 5,'c': 5}
。有关详细信息,请参阅此链接 https://django-rest-framework-simplejwt.readthedocs.io/en/latest/customizing_token_claims.html 和 https://github.com/SimpleJWT/django-rest-framework-simplejwt/blob/c684e8396f8446cc289ed73a0740ca222c85470d/rest_framework_simplejwt/serializers.py#L20。