Py学习  »  问与答

DRF用户的的注册和登录

greenpointan • 10 年前 • 4155 次点击  

最近用swift在IOS上做一个类似于社交类的APP,决定后台使用Django来提供API,暂时不考虑做web版本的app,所以直接使用了rest-framework。

英文文档看的我头好晕,最终对rest-framework一知半解的情况下,决定还是按照自己的想法来,于是从比较难解决的注册和登录来解决吧,关于注册,直接弃用DRF里面的登录方式,自己写登录方法,用户登录后返回一个Token,而这个Token则使用DRF里边的Token生成机制来为每一个用户创建一个token,存放在token表里。而在返回的时候有使用以下DRF的序列化,所以就有了下面的登录和注册方法。

class Registration(APIView):
'''用户注册,要求输入用户名(最大32个字节)username,密码(最小6个字节) password 以及电话号码 telephone'''
    def get_object(self, username):
        try:
            return User.objects.get(username=username)
        except User.DoesNotExist:
            return None

    def post(self, request, format=None):
        parser = json.loads(request.body)
        username = parser['username']
        password_unmake = parser['password']
        telephone = parser['telephone']
        user = self.get_object(username)
        if(user is None):
            password = hashers.make_password(password_unmake)
            new_user = User(username=username, password=password, telephone = telephone)
            new_user.save()
            token = Token.objects.create(user=new_user)
            serializer = TokenSerializer(token)
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response('Invalid username', status=status.HTTP_400_BAD_REQUEST)


class Login(APIView):
      '''用户登录 用户输入用户名后进行用户名密码的检查, 登陆成功后返回一个token{key, user}'''
    def post(self, request, format=None):
        parser = json.loads(request.body)
        username = parser['username']
        password = parser['password']
        user = auth.authenticate(username=username, password=password)
        if user is None:
            return Response('Invalid username or password', status = status.HTTP_400_BAD_REQUEST)
        token = Token.objects.get(user = user)
        serializer = TokenSerializer(token)
        return Response(serializer.data, status=status.HTTP_202_ACCEPTED)
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/1025
 
4155 次点击