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

Django后端以API形式构建时能否渲染模板?登录Token如何处理?

关于Django与DRF混合开发及Token使用的问题解答

1. 能否同时用DRF构建API和Django模板渲染前端?

完全可以,Django本身就支持这种混合开发模式,不需要在两种方式中二选一:

  • 你可以在同一个项目里,一部分视图用普通的Django View或TemplateView来渲染模板(也就是你熟悉的传统Django开发方式),另一部分用DRF的APIView或ViewSet编写接口,供前端JS或其他外部服务调用。
  • 举个简单的代码示例:
    • 普通模板视图:
      from django.views.generic import TemplateView
      
      class HomePage(TemplateView):
          template_name = 'home.html'
      
    • DRF API视图:
      from rest_framework.views import APIView
      from rest_framework.response import Response
      
      class UserListAPI(APIView):
          def get(self, request):
              users = [{'username': 'alice'}, {'username': 'bob'}]
              return Response(users)
      
    • 路由配置(两者互不干扰):
      from django.urls import path
      from .views import HomePage, UserListAPI
      
      urlpatterns = [
          path('', HomePage.as_view(), name='home'),
          path('api/users/', UserListAPI.as_view(), name='user-list-api'),
      ]
      
  • 这种模式很适合渐进式改造项目,或者部分页面需要复杂交互、部分页面仅需静态渲染的场景。

2. Token的处理及用途

Token并不是只给其他软件用的,它和用户身份密切相关:

  • 核心作用:Token是验证用户身份的凭证,替代传统的Session-Cookie模式,既适用于第三方服务调用你的API,也适用于你自己的前端页面通过JS调用DRF接口时的身份验证。
  • 用户登录后的Token处理:
    • 用户通过登录接口(比如DRF自带的ObtainAuthToken视图)提交用户名密码后,后端会返回一个Token字符串。
    • 如果你用Django模板渲染前端,可以把Token存在前端的localStorage、sessionStorage或者Cookie中。
    • 之后前端每次调用需要权限的DRF接口时,要在请求头里带上Token:Authorization: Token <你的Token字符串>,DRF就能通过这个Token识别当前请求的用户身份。
  • 前端JS调用示例(嵌入在模板页面中):
    // 登录获取Token
    async function login(username, password) {
      const response = await fetch('/api/auth/login/', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
        },
        body: JSON.stringify({ username, password }),
      });
      const data = await response.json();
      if (data.token) {
        localStorage.setItem('authToken', data.token); // 存储Token
      }
    }
    
    // 携带Token调用API
    async function getCurrentUser() {
      const token = localStorage.getItem('authToken');
      const response = await fetch('/api/user/profile/', {
        headers: {
          'Authorization': `Token ${token}`,
        },
      });
      return await response.json();
    }
    
  • 注意事项:
    • Token存在前端时要注意安全,比如全程用HTTPS传输,避免XSS攻击;如果涉及敏感操作,可以使用短有效期Token并配合刷新机制。
    • 如果你只是用Django模板渲染页面,不需要调用DRF接口,那完全可以不用Token,继续使用Django自带的Session认证即可——Token主要是为无状态的API调用场景设计的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 22:09:21