如何使用Python Django与Vue.js实现前后端分离开发?

陌婷同学_8461

陌婷同学_8461

2026-06-29

269人浏览

原创

vue.js连接django后端需分环境配置:开发时用vue.config.js代理/api请求至django,生产时将vue构建产物作为静态文件由django(或nginx)服务;api请求须带csrf token(通过cookie或/csrf/接口获取),并配合django-cors-headers处理跨域及options预检。

如何使用python django与vue.js实现前后端分离开发?

Vue.js 项目如何正确连接 Django 后端 API?

Django 默认不处理前端路由或静态资源,Vue.js 构建产物(dist/)必须作为纯静态文件被 Django 提供,而非由 Django 模板渲染。常见错误是把 vue-router 的 history 模式和 Django 的 URL 路由混用,导致刷新 404。

  • 确保 Vue CLI 项目中 vue.config.js 设置 publicPath: '/static/' 或相对路径(如 ''),避免硬编码域名
  • Django 的 settings.py 中配置 STATIC_ROOT = BASE_DIR / 'staticfiles',构建后运行 python manage.py collectstatic
  • 前端请求 API 时,统一用绝对路径前缀(如 /api/v1/users/),不要依赖 window.location.origin —— 开发环境和生产环境域名不同,容易跨域失败
  • 开发阶段建议用 Django 开启 runserver,Vue 用 npm run serve 并通过 devServer.proxy 代理 API 请求(例如将 /api/ 代理到 @#@#@#@#@#@#@#@#@#@0)

Django 如何安全地支持 Vue.js 的 CSRF 和认证?

Vue.js 发起的 POST/PUT/DELETE 请求默认不携带 Django 的 csrftoken,即使用户已登录,也会触发 403 Forbidden。这不是 CORS 问题,而是 CSRF 校验失败。

  • 登录成功后,Django 必须在响应头中返回 Set-Cookie: csrftoken=xxx,且 CSRF_COOKIE_HTTPONLY=False(否则 JS 读不到)
  • 前端需在每次请求头中显式带上 X-CSRFToken:从 document.cookie 解析 csrftoken,或更稳妥地——首次登录后调用 /api/csrf/ 接口获取 token(该接口应禁用 CSRF 校验:@csrf_exempt)
  • 若使用 JWT,可绕过 CSRF,但需注意:Django REST Framework 的 TokenAuthentication 不校验 CSRF,而 SessionAuthentication 会,二者不可混用在同一视图
  • 所有 API 视图应继承 APIView 而非 View,并明确指定 authentication_classes 和 permission_classes

如何让 Django 正确服务 Vue Router 的 history 模式?

Vue Router 默认 history 模式依赖服务端对所有非 API 路径返回 index.html,否则访问 /user/123 直接 404。

vue-component-analyzer
vue-component-analyzer

递归分析 Vue 项目组件依赖,从入口文件生成组件层级图,支持 Vue 2/3,输出组件名、文件路径和属性。适用于分析组件结构、排查依赖或了解项目架构。

下载
  • 不要用 Django 的 urls.py 逐条匹配前端路由(如 path('user/<pk>/', ...)</pk>),那是反模式
  • 在 Django 的根 URL 配置末尾加一条兜底规则:re_path(r'^.*$', TemplateView.as_view(template_name='index.html')),但前提是该 index.html 已复制到 templates/ 目录下(即 Vue 构建后的 dist/index.html)
  • 更推荐做法:把整个 dist/ 当作静态资源,用 Nginx 在生产环境直接服务;开发阶段可用 Django 的 serve 视图临时支持,但仅限 DEBUG=True
  • 注意:此兜底路由必须放在所有 API 路由之后,否则会吞掉 /api/xxx 请求

为什么 Axios 请求总被拦截为 OPTIONS 预检?

Vue 发起带认证头(如 Authorization)或自定义头(如 X-Requested-With)的请求时,浏览器自动发 OPTIONS 预检,而 Django 默认不响应它,导致请求卡住。

  • 安装 django-cors-headers,在 settings.py 中添加中间件:'corsheaders.middleware.CorsMiddleware',并在 MIDDLEWARE 中置于 CommonMiddleware 之前
  • 配置允许来源:CORS_ALLOWED_ORIGINS = ['@#@#@#@#@#@#@#@#@#@1', '@#@#@#@#@#@#@#@#@#@2'],不要用 CORS_ALLOW_ALL_ORIGINS = True(仅开发测试可用)
  • 若需携带凭证(cookies/token),必须同时设 CORS_ALLOW_CREDENTIALS = True,且前端 Axios 要加 withCredentials: true
  • Django REST Framework 的 DEFAULT_PERMISSION_CLASSES 不影响 OPTIONS,但中间件顺序错会导致预检失败 —— 确保 CorsMiddleware 在 AuthenticationMiddleware 之前

Django 和 Vue.js 分离的关键不在“怎么连”,而在“谁管什么”。API 归 Django,路由与交互归 Vue,静态资源交付方式决定部署复杂度。最容易被忽略的是:开发时的代理配置和生产时的静态文件路径必须严格对应,差一个斜杠或 publicPath 就会白屏。

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

相关文章

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

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

下载

相关标签:

vue.js django vue python js

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

相关专题

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

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

2023.08.11

2303

5

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

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

2024.03.19

6050

13

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

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

2024.03.19

5386

10

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

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

2023.07.20

1671

4

python能做什么
python能做什么

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

2023.07.25

4164

7

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

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

2023.07.31

1669

3

python教程
python教程

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

2023.08.03

24097

23

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

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

2023.08.04

2947

5

python eval
python eval

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

2023.08.04

2987

5

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Vue 教程
Vue 教程

共42课时 | 17万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.4万人学习

Vue.js 微实战--十天技能课堂
Vue.js 微实战--十天技能课堂

共18课时 | 1.7万人学习