IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> JWT、Cookie、Session -> 正文阅读

[Python知识库]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

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-09-24 10:31:00  更:2021-09-24 10:32:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 15:30:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码