第一步: 配置settings:

  

  0.1:配置  INSTALLED_APPS  

    加入rest_framework

    JWT后端代码,登录,注册_python

 

  0.2:配置 AUTH_USER_MODEL

JWT后端代码,登录,注册_html_02

 

  0.3:配置 REST_FRAMEWORK

JWT后端代码,登录,注册_python_03

 

 

  0.4 配置 JWT_AUTH

JWT后端代码,登录,注册_导包_04

 

 

第二步:建立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()), # 接口权限

]