如何实现Python Django与Vue.js的前后端分离架构验证?

秋静小哥_7421

秋静小哥_7421

2026-06-15

916人浏览

原创

django 不能直接用 render() 返回 vue 页面,因为其模板引擎会错误解析 vue 的 {{ }} 插值语法,导致页面空白或 vue 实例未挂载;正确做法是让 django 仅托管静态资源(如通过 whitenoise 或 nginx 直接返回 dist/index.html),并配置 web 服务器 fallback 所有前端路由至 index.html。

如何实现python django与vue.js的前后端分离架构验证?

为什么 Django 不能直接用 render() 返回 Vue 页面?

因为 Vue CLI 默认构建出的 dist/ 目录是纯静态资源(index.html + js/css),而 Django 的 render() 会走模板引擎,把 {{ }} 当成 Django 模板变量解析,导致 Vue 的插值语法被提前破坏。常见现象是页面空白、控制台报错 TypeError: Cannot read property 'xxx' of undefined,或者 Vue 实例根本没挂载。

正确做法是让 Django 只做静态文件服务器:把 dist/ 放进 STATIC_ROOT,用 whitenoise 或 Nginx 托管 index.html,并确保所有前端路由 fallback 到它。

  • 开发时:Vue 使用 vue-cli-service serve 启动独立服务(如 http://localhost:8080),Django 运行在 http://localhost:8000,两者跨域;需在 Django 中配置 CORS_ORIGIN_WHITELIST 允许前端域名
  • 生产时:Vue 构建后把整个 dist/ 拷贝到 Django 的 staticfiles 目录下,再通过 whitenoise 或 Nginx 直接返回 index.html,不经过 Django 视图
  • 关键点:Django 的 urls.py 必须在最后加一条通配规则,用 re_path(r'^.*$', TemplateView.as_view(template_name='index.html'))(仅开发调试用),正式环境禁用该路由,改由 Web 服务器处理 fallback

如何让 Django API 正确响应 Vue 的 axios 请求?

Django 默认不带 CSRF 防护的 API 响应能力,而 Vue 前端发 POST/PUT/DELETE 时若没带 X-CSRFToken,会被 Django 拒绝(HTTP 403)。但 REST API 通常不该依赖 Cookie+CSRF,尤其跨域场景。

解决方案分两种场景:

Json Schema Toolkit
Json Schema Toolkit

使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。

下载
  • 前后端同域(如都走 https://myapp.com):在 Vue 的 main.js 中读取 document.cookie 里的 csrftoken,通过 axios.defaults.headers.common['X-CSRFToken'] 自动带上
  • 前后端分离且跨域(推荐):关闭 Django 对 API 视图的 CSRF 检查,用 @csrf_exempt 装饰器或继承 APIView 并设置 authentication_classes = [TokenAuthentication] 等无状态认证方式
  • 务必确认 settings.py 中 DEFAULT_AUTHENTICATION_CLASSES 不含 SessionAuthentication(它强制依赖 CSRF),否则即使加了 @csrf_exempt,中间件仍可能拦截

Vue Router 的 history 模式在 Django 部署后为何 404?

Vue Router 开启 history 模式后,URL 如 /dashboard/users 是前端路由,实际没有对应 Django URL,Web 服务器找不到静态文件就直接返回 404,根本不会进 Django。

这不是 Django 的问题,而是 Web 服务器配置缺失:

  • 用 whitenoise(开发/轻量生产):必须在 settings.py 中设置 WHITENOISE_INDEX_FILE = True,并确保 STATICFILES_DIRS 包含 Vue 的 dist/,同时 whitenoise 会自动把所有未命中静态文件的请求 fallback 到 index.html
  • 用 Nginx(推荐生产):在 location 块中加 try_files $uri $uri/ /index.html;,确保除真实静态资源外,全部交由 index.html 处理
  • 切勿在 Django 的 urls.py 里写 re_path(r'^.*$', ...) 上线——它会让所有请求都进 Python,性能差且易暴露后端结构

Django REST Framework 返回的数据结构怎么和 Vue 统一?

DRF 默认返回的是字段平铺结构(如 {"id":1,"name":"Alice"}),但 Vue 组件常期望统一包装格式,比如 {"code":200,"data":{...},"msg":"ok"}。手动每个视图写封装容易漏、难维护。

推荐在 DRF 层统一拦截响应:

  • 写一个自定义 renderer,继承 JSONRenderer,重写 render() 方法,在序列化后套上 {"code":200,"data":data,"msg":"success"}
  • 更轻量的做法:用 Response 的 template_name 或自定义 SuccessResponse 类,替代原生 Response(data, status=200)
  • 注意异常路径:DRF 的 APIException 子类(如 ValidationError)默认不走 renderer,需配合 EXCEPTION_HANDLER 配置,统一转成相同结构的错误体,否则 Vue 的 axios.interceptors.response 会收到两种格式,判断逻辑变复杂
Django 和 Vue 分离的关键不在“能跑”,而在“谁负责什么”——Django 别碰前端路由和 HTML 渲染,Vue 别碰 session 和模板变量;最常翻车的点其实是 Web 服务器对 index.html 的 fallback 配置,以及跨域下 CSRF 和认证方式的混用。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2243

5

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

5930

13

后端的主要工作内容介绍
后端的主要工作内容介绍

后端是应用程序的服务端部分,负责核心任务,如数据库交互、业务逻辑处理和响应客户端请求。想了解更多后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

5266

10

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1651

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

4044

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1649

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

23337

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2867

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2907

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Django 6.1 官方文档
Django 6.1 官方文档

共0课时 | 0人学习

Django 教程
Django 教程

共28课时 | 9.7万人学习

Django DRF 源码解析
Django DRF 源码解析

共21课时 | 2万人学习