django使用rest快速实现前后端分离登录注册

简介

官方文档链接:https://www.django-rest-framework.org/
Django REST框架是一个功能强大且灵活的工具包,用于构建Web API。

您可能希望使用REST框架的一些原因:
该网站可浏览API是你的开发人员一个巨大的可用性胜利。
身份验证策略包括OAuth1a和OAuth2的程序包。
支持ORM和非ORM数据源的序列化。
可自定义 - 如果您不需要更强大的功能,只需使用常规的基于功能的视图。
丰富的文档和良好的社区支持。
由国际知名公司使用和信任,包括Mozilla,Red Hat,Heroku和Eventbrite。

安装

pip install djangorestframework
django使用的是2.1.8版本

使用

创建模型:

class UserModel(models.Model):
    username = models.CharField(max_length=32, unique=True)
    password = models.CharField(max_length=256)

    def verify_password(self, password):
        return self.password == password

序列化:

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserModel
        fields = 'id', 'username', 'password'

视图函数:


class UserAPI(APIView):

    def post(self, request):
        # query_params=GET
        action = request.query_params.get('action')
        if action == 'register':
            return self.do_register(request)

        elif action == 'login':
            return self.do_login(request)

    def do_register(self, request):
        serializer = UserSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.error_messages)

    def do_login(self, request):
        username = request.data.get('username')
        password = request.data.get('password')

        try:
            user = UserModel.objects.get(username=username)
        except Exception as e:
            return Response({'msg': e})

        if not user.verify_password(password):
            return Response({'msg': 'password error!'})

        token = uuid.uuid4().hex
        print(token, uuid.uuid4())
        cache.set(token, user.id, timeout=60 * 60)
        data = {
            'msg': 'login success!',
            'status': status.HTTP_200_OK,
            'token': token,
        }

        return Response(data)

url:

app_name = 'app'

urlpatterns = [
    path('users/', UserAPI.as_view()),
]

你可能感兴趣的:(django,restAPI)