You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在无React等前端的纯Django项目中实现JWT Token认证

纯Django中实现JWT Token Authentication的方案

当然可以在不依赖前端框架的纯Django项目中实现JWT认证,下面是具体的实现思路和参考资源:

一、核心实现思路

1. 选用成熟的JWT库

推荐使用djangorestframework-simplejwt,它是Django REST Framework(DRF)的扩展,而DRF本身是Django的后端扩展,完全符合纯Django项目的需求,无需引入任何前端库。

安装命令:

pip install djangorestframework-simplejwt

2. 项目配置

  • 在settings.py的INSTALLED_APPS中添加:
    INSTALLED_APPS = [
        # 其他已有的APP
        'rest_framework',
        'rest_framework_simplejwt',
    ]
    
  • 配置DRF的默认认证类:
    REST_FRAMEWORK = {
        'DEFAULT_AUTHENTICATION_CLASSES': (
            'rest_framework_simplejwt.authentication.JWTAuthentication',
        ),
    }
    
  • 自定义JWT参数(可选):
    from datetime import timedelta
    
    SIMPLE_JWT = {
        'ACCESS_TOKEN_LIFETIME': timedelta(minutes=15),
        'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
    }
    

3. 配置路由

在项目的urls.py中添加Token相关路由:

from rest_framework_simplejwt.views import (
    TokenObtainPairView,
    TokenRefreshView,
)

urlpatterns = [
    # 其他已有路由
    path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
    path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
]

4. 保护视图

对于需要认证的视图,添加权限控制:

from rest_framework.permissions import IsAuthenticated
from rest_framework.views import APIView
from rest_framework.response import Response

class ProtectedView(APIView):
    permission_classes = [IsAuthenticated]

    def get(self, request):
        return Response({'message': f'欢迎,{request.user.username}!'})

5. 纯Django模板中的Token交互

在登录模板中,用原生JavaScript处理Token的获取和携带:

<!-- 登录表单 -->
<form id="loginForm">
    <input type="text" name="username" placeholder="用户名">
    <input type="password" name="password" placeholder="密码">
    <button type="submit">登录</button>
</form>

<script>
document.getElementById('loginForm').addEventListener('submit', async function(e) {
    e.preventDefault();
    const formData = new FormData(this);
    const response = await fetch('/api/token/', {
        method: 'POST',
        body: formData
    });
    const data = await response.json();
    if (response.ok) {
        // 存储Token到localStorage
        localStorage.setItem('access_token', data.access);
        localStorage.setItem('refresh_token', data.refresh);
        // 跳转到受保护页面
        window.location.href = '/protected/';
    } else {
        alert('登录失败:' + data.detail);
    }
});

// 后续请求携带Token
async function fetchProtectedData() {
    const token = localStorage.getItem('access_token');
    const response = await fetch('/protected/', {
        headers: {
            'Authorization': `Bearer ${token}`
        }
    });
    const data = await response.json();
    console.log(data);
}
</script>

二、参考资源

  • 视频教程:可搜索国内视频平台上的「纯Django JWT认证实现」类教程,这类视频通常会从环境搭建、配置到模板交互做完整演示。
  • 示例项目:可在代码托管平台搜索「django-jwt-simple-example」,找到纯Django环境下的JWT实现项目,重点参考配置文件、路由设置和模板中的JS逻辑。

内容的提问来源于stack exchange,提问作者Fors1t

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 14:20:36