Python Django中基于djangorestframework-jwt的JWT认证实现详解

拾光
拾光
发布时间:2026-10-14| 5人浏览过
原创

本文详细解析在Python Django项目中如何使用djangorestframework-jwt库实现JWT认证机制。内容涵盖JWT优缺点分析、库的安装配置、后端登录接口开发、自定义认证成功返回数据以及settings.py中的关键参数设置,帮助开发者快速搭建安全高效的分布式认证系统。

JWT优缺点分析

首先分析JWT(JSON Web Token)的核心优缺点。

JWT的主要优势在于其轻量级和无状态特性。

第一,它极大地简化了分布式系统中的单点登录(SSO)实现过程。

第二,由于JWT数据存储在客户端,服务端无需在数据库中保存会话信息,从而有效分担了数据库或服务器的存储压力。

然而,JWT也存在一些明显的局限性。

第一,数据存储在客户端意味着服务端仅验证JWT本身,无法直接识别或控制具体的客户端状态。第二,虽然可以设置JWT的过期时间,但由于数据存储在客户端,一旦签发,服务端难以主动调整或撤销其有效期,这给过期时间的动态管理带来了一定困难。

JWT库安装与配置

接下来介绍JWT库的安装步骤。

使用pip命令安装djangorestframework-jwt库,指定豆瓣镜像源以加速下载:pip install djangorestframework-jwt -i https://pypi.douban.com/simple

安装完成后,需要在settings.dev配置文件中添加相关配置。


REST_FRAMEWORK = {
  'DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
    'rest_framework.authentication.SessionAuthentication',
    'rest_framework.authentication.BasicAuthentication',
  ),
}
import datetime
JWT_AUTH = {
  'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1), ##设置token的有效值
}

JWT生成与接口实现

随后演示如何手动生成JWT Token。


from rest_framework_jwt.settings import api_settings
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)

然后在子应用的路由文件urls.py中实现后端登录认证接口。


from rest_framework_jwt.views import obtain_jwt_token
urlpatterns = [
  path(r'login/', obtain_jwt_token),   ##提供接口
]

自定义返回数据与最终配置

此外,还可以自定义JWT认证成功后的返回数据结构。


def jwt_response_payload_handler(token, user=None, request=None):
  """
  自定义jwt认证成功返回数据
  """
  return {
    'token': token,
    'id': user.id,
    'username': user.username
  }#这个是自定义jwt认证成功返回数据,一般会放在子应用下utils文件中,然后在settings中配置,将路径告诉django

最后,修改settings.dev配置文件以应用上述自定义处理逻辑。


# JWT
JWT_AUTH = {
  'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1),
  'JWT_RESPONSE_PAYLOAD_HANDLER': 'user.utils.jwt_response_payload_handler',
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。