栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

JWT、Cookie、Session

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JWT、Cookie、Session

cookie

定义:是由服务器端生成,发送给浏览器,浏览器会将cookie中key/value保存到某个目录下的文本文件内,下次请求同一网站时将自动发送该cookie给浏览器

特点:

        1、是以键值队的格式存储数据的

        2、不同域名之间的cookie是不能互相访问的

        3、当浏览器请求某网站时,会将所关联的cookie发送给浏览器

Session

应用:对于一些相对于很敏感的信息,一般是由session保存在服务器端进行状态保持

Django项目默认开启session,如果不需要的话,可以再settings.py文件中删除session中间件

存储方式:

        1、存储在数据库中

        2、存储在缓存中

        3、混合存储

session基于cookie来实现

JWT:Token

分为三个部分

header #  头部:可加密可解密

payload #  载荷:可加密可解密

secret #  签证:头部+载荷+头部的加密方式+[只有后台知道的随机字符串,之可加密不可解密]

#  第一次:前端--(用户信息)--后端{1,验证,2,生成Token,3,返回}

#  第二次:前端--(缓存json)--后端{1,验证TOken,2,处理json,3,返回}

#   使用django自己的用户模块

1,建立model 继承:AbstractUser

from django.contrib.auth.models import AbstractUser

from django.db import models

from django.contrib.auth.models import AbstractUser

class JWTUser(AbstractUser):

    nickname = models.CharField(max_length=64)

    age = models.IntegerField()

#迁移报错:on database 'default',直接删除所有表后再次迁移即可

2,views中:

from rest_framework_jwt.settings import api_settings #生成token的包

# 使用JWT的注册接口

from rest_framework.views import APIView

from .Ser import *

from rest_framework.response import Response


class Users(APIView):

    permission_classes = [AllowAny] # 所有人都可以访问


    def post(self, request):

        data = request.data # 获取数据

        # 密码加密

        data1 = copy.deepcopy(data)

        old_pwd = data.get('password')

        new_pwd = make_password(old_pwd)

        data1['password'] = new_pwd

        # 存到数据库

        ser = UserSer(data=data1)

        if ser.is_valid():

            ser.save()

            user = JWTUser.objects.get(username=data1['username']) # 查询当前用户

            # 补充生成记录登录状态的token 生产token

            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)

            # 将token和数据库的信息进行返回

            response_data = ser.data

            response_data['token'] = token

            return Response({'code': 200, 'meg': '注册成功', 'data': response_data})

        else:

            print(ser.errors)

            return Response({'code': 400, 'meg': '注册失败'})

3,在settings中配置:

INSTALLED_APPS = [

    'rest_framework',

]

AUTH_USER_MODEL = 'Jwtapp.JWTUser' 指定项目和表

# 配置jwt验证

REST_frameWORK = {

    # 身份认证

    'DEFAULT_AUTHENTICATION_CLASSES': (

        'rest_framework_jwt.authentication.JSONWebTokenAuthentication', # JSonWebToken 认证模式

        'rest_framework.authentication.SessionAuthentication',

        'rest_framework.authentication.BasicAuthentication',

    ),

    # 全局配置JWT验证设置

    'DEFAULT_PERMISSION_CLASSES': (

        'rest_framework.permissions.IsAuthenticated',

    ),

}

import datetime

JWT_AUTH = {
    'JWT_AUTH_HEADER_PREFIX': 'JWT', # 声明方法

    'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1), # 使用期限

    'JWT_RESPONSE_PAYLOAD_HANDLER':

    'Jwtapp.views.jwt_response_payload_handler', # 重新login登录返回函数

}

登录:

# 重新用户登录返回函数

def jwt_response_payload_handler(token, user=None, request=None):

'''

:param token: jwt生成的token值

:param user: User对象

:param request: 请求

'''

return {

'token': token,

'user': user.username,

'userid': user.id,

'nickname': user.nickname

}

urls:

from rest_framework_jwt.views import obtain_jwt_token #  登录时生产token

path('login/', obtain_jwt_token), #  登录接口

path('jwt/user/', Users.as_view()), #  注册接口

#permission_classes = [AllowAny] #  所有人都可以访问

#permission_classes = [IsAdminUser] #  登录了才可以访问

下载:#  pip install djangorestframework-jwt

#  Django 版本必须时2.2.2

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/269489.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号