简介:利用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'),
]
评论区