Django--JWT

1.JWT

单向且不可逆的所以安全性较高,可以解码,不占用服务器内存,扩展能力较强,解决传统的session方法出现的问题

2.djangorestframework-jwt使用

在django安装

pip install djangorestframework-jwt
2.1配置

在settings.py中进行配置

from datetime import timedelta
JWT_AUTH = {
    # jwt过期时间
    "JWT_EXPIRATION_DELIA":timedelta(days=2),
}
2.2提供了登录方法

配置路由

from rest_framework_jwt.views import obtain_jwt_token
urlpatterns = [
    path('login/', obtain_jwt_token), #登录视图函数
]
2.3自定义返回数据

因为视图只返回token,所以对自定义视图
在子应用下创建utils.py

def jwt_response_payload_handler(token,user,request,*args,**kwargs):
	return {
		"uid":user.id,
		"username":user.username,
		"token":token
	}

在settings.py进行配置

JWT_AUTH = {
	 # jwt 过期时间
    "JWT_EXPIRATION_DELIA":timedelta(days=2),
    # 配置自定义函数
    "JWT_RESPONSE_PAYLOAD_HANDLER": "user.utils.jwt_response_payload_handler"

}
2.4 增加登录功能

在登录时进行验证用户信息,所以自定义认证类
修改Django认证系统的认证后端需继承django.contrib.auth.backends.ModelBackend,重写authenticate方法

from django.contrib.auth.backends import ModelBackend
from .models import User
from django.contrib.auth.hashers import check_password
# 定义自己的认证类
class MyAuthentication(ModelBackend):
    def authenticate(self, request, username=None, password=None, **kwargs):
        # is_staff 为true
        # is_active 为true

        # 根据需求查询用户对象
        user = User.objects.filter(username=username,is_active=True,is_staff=True).first()

        # 判断用户是否存在、密码是否正确
        # check_password 会对前端传来的密码进行加密
        if user and check_password(password, user.password):
            return user

        return None
2.5配置自定义认证类
# 配置自定义认证类
AUTHENTICATION_BACKENDS = [
    'user.utils.MyAuthentication',
]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值