第一步: 配置settings:
0.1:配置 INSTALLED_APPS
加入rest_framework
0.2:配置 AUTH_USER_MODEL
0.3:配置 REST_FRAMEWORK
0.4 配置 JWT_AUTH
第二步:建立model模型类
# 导包, 属于Django自带的User用户包
form django.contrib.auth.models import AbstractUser
# user数据
class UserModel(AbstractUser):
username = models.CharField(max_length=100,unique=True)
password = models.CharField(max_length=255)
phone = models.CharField(max_length=100)
token = models.CharField(max_length=255)
第三步:迁移生成表
# 迁移的第一步
python manage.py makemigrations
# 迁移的第二步
python manage.py migrate
第四步:编写序列化器 serializers
from rest_framework import serializers # 序列化器的基本导包
from user.models import UserModel # 导入模型类
class JWT_User_Ser(serializers.ModelSerializer):
class Meta:
model = UserModel # model表
fields = '__all__' # 全部数据
第五步:编写View,写注册,登录代码
from django.shortcuts import render # 自带的导包
from rest_framework.views import APIView # APIView 导包
from rest_framework.views import Response # 返回 Response 导包
from rest_framework_jwt.settings import api_settings # 生成token导包
from user.serializers import JWT_User_Ser #序列化导包
from django.contrib.auth.hashers import make_password # 密码加密导包
import copy # 拷贝的导包
from user.models import UserModel # 模型类导包
#权限 #是否认证 # 允许通过
from rest_framework.permissions import IsAuthenticated,AllowAny # 权限导包
# Create your views here.
# 使用jwt编写注册代码
class UserView(APIView):
def post(self,request):
# 1 接收参数
data = request.data
# 2 深入拷贝接收过来的参数
sky = copy.deepcopy(data)
# 3 取出旧密码
old_password = data.get('password')
# 4 旧密码加密转换成新密码
new_password = make_password(old_password)
# 将新密码赋值
sky['password'] = new_password
# 2 序列化解析新密码
ser_user = JWT_User_Ser(data=sky)
# 3 校验 新密码
ser_user.is_valid()
# 4 保存 新密码
ser_user.save()
# 生成token
user = UserModel.objects.get(username=sky['username'])
jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
payload = jwt_payload_handler(user)
token = jwt_encode_handler(payload)
# user.token = token
print(token)
# 将token和数据库用户信息进行返回
resopnse_data = ser_user.data
resopnse_data['JWTToken'] = token
# 5 返回
return Response({'code':200,'data':resopnse_data})
# 重新用户登录返回函数
def jwt_response_payload_handler(token,user=None,request=None):
'''
:param token: jwt生成的token值
:param user: User对象
:param request: 请求
'''
return {
'token':token,
'username':user.username,
'userid':user.id,
'phone':user.phone
}
class TestList(APIView):
permission_classes = [AllowAny] # 接口加权限
# authentication_classes =
def get(self,request):
return Response({'msg':'允许访问'})
class TestStr(APIView):
permission_classes = [IsAuthenticated]
def get(self,request):
return Response({'msg':'请登录后再来访问'})
第六步:配置路由URL
from django.contrib import admin
from django.urls import path,re_path,include
from user.views import UserView,TestList,TestStr #导入View中的函数
from rest_framework_jwt.views import obtain_jwt_token # 验证码导包
urlpatterns = [
path('admin/', admin.site.urls),
#全局路由 导入re_path,include
#re_path(r'users/',include(('users.urls','users'),namespace='users'))
path('users/',UserView.as_view()), # jwt编写注册路由
path('login/',obtain_jwt_token), # 登录路径
path('testlist/',TestList.as_view()), # 接口权限
path('teststr/',TestStr.as_view()), # 接口权限
]