from rest_framework_jwt.serializers import jwt_payload_handler,jwt_encode_handler
class UserModelSerializer(ModelSerializer):
username = serializers.CharField(max_length=32)
class Meta:
model = models.UserInfo
fields = ['username', 'password', 'id']
extra_kwargs = {
'id': {'read_only': True},
'password': {'write_only': True}
}
def validate(self, attrs):
user = self._get_user(attrs)
token = self._get_token(user)
self.context['token'] = token
self.context['user'] = user
return attrs
def _get_user(self, attrs):
username = attrs.get('username')
password = attrs.get('password')
import re
if re.match('^1[3-9][0-9]{9}$', username):
user = models.UserInfo.objects.filter(telephone=username).first()
elif re.match('^.*@.*$', username):
user = models.UserInfo.objects.filter(email=username).first()
else:
user = models.UserInfo.objects.filter(username=username).first()
if user:
ret = user.check_password(password)
if ret:
user.last_login = datetime.datetime.now()
user.save()
return user
else:
raise ValidationError('密码错误')
else:
raise ValidationError('用户不存在')
def _get_token(self, user):
payload = jwt_payload_handler(user)
token = jwt_encode_handler(payload)
return token
from rest_framework_jwt.views import obtain_jwt_token
ulrpatterns = [
path('log',obtain_jwt_token)
]