rest_framework_jwt的简单使用

安装

pip install djangorestframework-jwt

在app中注册

INSTALLED_APPS = [
    ...
    # 解决跨域问题
    'corsheaders',
    'rest_framework',
    'xadmin',
    'crispy_forms',
    'rest_framework_jwt',

    ...
]

配置:

# rest_framework 配置
REST_FRAMEWORK = {
    # 异常处理函数配置
    'EXCEPTION_HANDLER': 'luffyapi.utils.exceptions.luffy_exception_handler',
    # 在rest_framework认证中添加JWT的全局认证
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.BasicAuthentication',
    ),
}

# JWT的认证
import datetime


JWT_AUTH = {
    'JWT_ENCODE_HANDLER':
        'rest_framework_jwt.utils.jwt_encode_handler',
    # 解析token
    'JWT_DECODE_HANDLER':
        'rest_framework_jwt.utils.jwt_decode_handler',

    # 生成JWT载荷部分的内容(中间一段内容)
    'JWT_PAYLOAD_HANDLER':
        'rest_framework_jwt.utils.jwt_payload_handler',

    # 从载荷中获取user关键字段,如user_id 或者username 用这个字段信息从数据库中查询用户
    'JWT_PAYLOAD_GET_USER_ID_HANDLER':
        'rest_framework_jwt.utils.jwt_get_user_id_from_payload_handler',

    # 自定义登录认证成功之后返回的字典内容,返回一个字典
    'JWT_RESPONSE_PAYLOAD_HANDLER':
        'rest_framework_jwt.utils.jwt_response_payload_handler',

    'JWT_SECRET_KEY': SECRET_KEY,  # 用于生成token签名部分的秘钥
    'JWT_GET_USER_SECRET_KEY': None,  # 根据每个用户生成不同的秘钥,需要放入一个函数,函数必须接受一个参数,参数为user对象,通过user对象生成一个token秘钥并返回,秘钥用于生成token签名
    'JWT_PUBLIC_KEY': None,  # 用于验证token是否合法的函数,设置此函数之后JWT_SECRET_KEY将失效
    'JWT_PRIVATE_KEY': None,  # 用于生成token的函数,设置此函数之后JWT_SECRET_KEY将失效
    'JWT_ALGORITHM': 'HS256',  # token签名部分的加密方式
    'JWT_VERIFY': True,  # 是否告诉对方密码有效
    'JWT_VERIFY_EXPIRATION': True,  # 是否开启验证token的有效时间,True开启,False关闭(token永久有效)
    'JWT_LEEWAY': 0,  # 允许token在过期几秒内任然可以使用
    'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=300),  # 设置token的到期时间
    'JWT_AUDIENCE': None,
    'JWT_ISSUER': None,

    'JWT_ALLOW_REFRESH': False,  # 刷新token到期时间,False不刷新,True刷新
    'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=7),  # 刷新一次添加多长有效时间

    'JWT_AUTH_HEADER_PREFIX': 'JWT',  # 指定token开始字符串必须是JWT
    'JWT_AUTH_COOKIE': None,  # 在使用token时是不是还接受cookie认证

}

登录url配置

from rest_framework_jwt.views import obtain_jwt_token

urlpatterns = [
    path('login/', obtain_jwt_token),

]
原文地址:https://www.cnblogs.com/wtil/p/14940521.html