Django

DRF-JWT的基本使用方式

文 / 大炳哥 来源 / 原创 阅读 / 4720 1年前

使用 djangorestframework-jwt 不需要定义视图函数吗?

一般情况下,DRF-JWT在登陆功能中应用最为广泛。而登陆视图的功能就是生成签证token ,然后将其返回给前端。

而生成签证token的事情,已有 djangorestframework-jwt 提供的 obtain_jwt_token 函数完成。

我们需要做的就是:补充一个函数用于处理返回值的格式,将 token 按照接口的格式返回给前端。做法就是通过 JWT_RESPONSE_PAYLOAD_HANDLER 配置项,指向自定义的函数。

操作方式:

第一步,将获取token的路由 与 obtain_jwt_token 进行关联。

# urls.py

from django.urls import path
from rest_framework_jwt.views import obtain_jwt_token  # 导入 obtain_jwt_token

urlpatterns = [
    path('api/login', obtain_jwt_token),  # 路由关联视图
]

第二步,设置token的返回格式。

(1)根据接口文档,token 的前缀需要是 Bearer ,因此将 JWT_AUTH_HEADER_PREFIX 的值设置为 Bearer。这样在解析 token 时,会自动去掉前缀。

(2)返回的 token 不可能是永久的,因此要给 token 设定过期时间。视图函数逻辑无法修改,我们可以通过 JWT_EXPIRATION_DELTA 配置项来完成设置。

# JWT认证的配置信息
JWT_AUTH = {
    'JWT_AUTH_HEADER_PREFIX': 'Bearer',  # JWT的前缀
    'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1),  # JWT的过期时间
    'JWT_RESPONSE_PAYLOAD_HANDLER': 'myserver.utils.jwt_response_payload_handler',  # 请求成功的处理函数路径
}

注意点: JWT_RESPONSE_PAYLOAD_HANDLER 的值,是你定义jwt_response_payload_handler的路径。 比如:你的应用名字叫做 myserver,然后在此目录下的utils.py文件中,定义jwt_response_payload_handler函数来处理jwt请求成功的返回值。 那么JWT_RESPONSE_PAYLOAD_HANDLER的值就是 'myserver.utils.jwt_response_payload_handler'.

(3) 最终返回给前端的格式,有自定义的函数完成。在自定义函数中重新封装返回值。

def jwt_response_payload_handler(token, user=None, request=None):
    """
    自定义jwt认证成功的返回数据格式
    :param token:
    :param user:
    :param request:
    :return:
    """
    return {
        'status': 0,
        'message': '登陆成功!',
        'token': f'Bearer {token}'
    }

13

评论

共0条评论
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~

站点声明:本站转载作品版权归原作者及来源网站所有,原创内容作品版权归作者所有,任何内容转载、商业用途等均须联系原作者并注明来源。

© 2019 The Pride & Joy of an Artisan. · Designed By duoguyu · Powered By Django京ICP备19006898号-1
相关侵权、举报、投诉及建议等,请发E-mail:lemont0086@163.com

友情链接: 大炳哥的博客 逐梦个人博客 微微的博客 daixu 十年之约