如何使用Django rest api进行登录
您好,我正在学习Django rest api,我正在学习其他人的代码,但我不知道如何登录 我的代码: 型号:如何使用Django rest api进行登录,django,rest,server,backend,Django,Rest,Server,Backend,您好,我正在学习Django rest api,我正在学习其他人的代码,但我不知道如何登录 我的代码: 型号: class User(models.Model): class Meta: db_table = "users" created_at = models.DateTimeField(default = timezone.now) updated_ay = models.DateTimeField(auto_now= True) emai
class User(models.Model):
class Meta:
db_table = "users"
created_at = models.DateTimeField(default = timezone.now)
updated_ay = models.DateTimeField(auto_now= True)
email = models.CharField(max_length = 128, unique= True)
password = models.CharField(max_length = 255)
active = models.BooleanField(default=False)
token = models.CharField(max_length= 255, null = True)
nickname = models.CharField(max_length = 255, null = True)
序列化程序:
class UserSerializer(serializers.ModelSerializer):
email = serializers.EmailField()
class Meta:
model = User
fields = '__all__'
def to_internal_value(self, data):
ret = super(UserSerializer, self).to_internal_value(data)
# cipher = AESSipher()
# ret['password'] = cipher.encrypt_str(ret['password'])
return ret
def to_representation(self, obj):
ret = super(UserSerializer, self).to_representation(obj)
print(ret)
return ret
def validate_email(self, value):
if User.objects.filter(email=value).exists():
raise serializers.ValidationError("Email already exists")
return value
def validate_password(self, value):
if len(value) < 8:
raise serializers.ValidationError("The password must be at least %s characters long. " % 8)
return value
def create(self, validate_data):
user = User.objects.create(
email = validate_data['email'],
password = validate_data['password'],
)
user.active = False
user.save()
message = render_to_string('user/account_activate_email.html', {
'user': user,
'domain' : 'localhost:8000',
'uid': urlsafe_base64_encode(force_bytes(user.pk)),
'token': account_activation_token.make_token(user)
})
mail_subject = 'sign up mail.'
to_email = 'mymail@gmail.com'
email = EmailMessage(mail_subject, message, to=[to_email])
email.send()
return validate_data
因为我想在移动客户端部分处理登录状态,
我想在登录时只获取用户模型信息
当在客户端输入电子邮件和密码时,我想获得用户信息
如何登录?你认识谁吗?这是文章的链接:自定义用户身份验证;它应该对你有帮助
您好,您可以为此使用Django软件包。例如,您可以使用rest auth软件包此软件包具有登录、注销和重置密码所需的所有内容,您只需遵循rest auth文档即可: . .
class SignUp(APIView):
def post(self, request):
serializer = UserSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_200_OK)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class UserActivate(APIView):
permission_classes = (permissions.AllowAny,)
def get(self, request, uidb64, token):
try:
uid = force_text(urlsafe_base64_decode(uidb64))
user = User.objects.get(pk = uid)
except(TypeError, ValueError, OverflowError, User.DoesNotExist):
user = None
try:
if user is not None and account_activation_token.check_token(user, token):
user.active = True
user.token = token
user.save()
return Response(user.email + 'email active', status=status.HTTP_200_OK)
else:
return Response('Expired Link', status=status.HTTP_400_BAD_REQUEST)
except Exception as e:
print(traceback.format_exc())