随笔 - 15  文章 - 0  评论 - 0  阅读 - 8778

JWT后端代码,登录,注册

第一步: 配置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()),   # 接口权限

]
复制代码

 

 

 

网址:

 

https://www.cnblogs.com/ppzhang/p/12294852.html    JWT后端代码网址

 

 

https://www.cnblogs.com/ppzhang/p/12294798.html     JWT理论知识点网址

 

posted on   时间忘淡一切  阅读(223)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示