社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  问与答

DRF用户的的注册和登录

greenpointan • 9 年前 • 4021 次点击  

最近用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
 
4021 次点击