侧边栏壁纸
  • 累计撰写 17 篇文章
  • 累计创建 10 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

关于simplejwt的应用

十点差三分
2024-11-01 / 0 评论 / 0 点赞 / 15 阅读 / 0 字

简介:利用simplejwt已有的登录功能、自定义一个注册功能完成注册和登录。

首先需要构建出一个DRF项目,然后安装好simplejwt并且做好相应的配置(包括登录、token的刷新这两个接口)。之后通过DRF完成一个注册的接口。具体实现如下:

序列化模型

利用Django自带的User模型,对其进行序列化,并重写create方法。如果没有重写create方法会导致密码哈希问题(Django默认使用PBKDF2算法对密码进行哈希处理。如果密码没有经过正确的哈希处理,即使用户名正确,认证也会失败)。

from rest_framework import serializers
from django.contrib.auth.models import User


class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ['id', 'username', 'password']
        extra_kwargs = {
            'username': {'write_only': True, 'min_length': 3},
            'password': {'write_only': True, 'min_length': 3}
        }

    def create(self, validated_data):
        user = User.objects.create_user(
            username=validated_data['username'],
            password=validated_data['password']
        )
        return user

视图的创建

l利用APIView创建一个名为register的视图

class register(APIView):
    def post(self, request):
        serializer = UserSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response({
                'code': 200,
                'message': '注册成功'
            })
        else:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

接口的创建

在user app下的urls.py里,创建如下所示的路由

urlpatterns = [
    path('register', register.as_view(), name="user"),# 新建一个注册接口

    path('login', TokenObtainPairView.as_view(), name='token_obtain_pair'),
    path('login/refresh', TokenRefreshView.as_view(), name='token_refresh'),
]

0

评论区