django vue实现
Django与Vue.js整合实现
Django作为后端框架与Vue.js作为前端框架的整合,可以通过分离前后端或模板嵌入两种方式实现。以下是具体方法:
前后端分离架构
后端Django配置:
- 创建Django项目并配置RESTful API接口,使用
django-rest-framework简化开发。 - 配置跨域支持,安装
django-cors-headers并在settings.py中添加:INSTALLED_APPS = ['corsheaders'] MIDDLEWARE = ['corsheaders.middleware.CorsMiddleware'] CORS_ORIGIN_ALLOW_ALL = True
前端Vue.js配置:
- 使用Vue CLI创建独立项目,通过
axios调用Django API:axios.get('http://localhost:8000/api/data/') .then(response => { this.data = response.data }) - 构建生产版本后将
dist目录文件复制到Django的static目录。
模板嵌入方式
Django模板集成:
- 在
settings.py中配置模板路径和静态文件:TEMPLATES = [{'DIRS': [os.path.join(BASE_DIR, 'templates')]}] STATICFILES_DIRS = [os.path.join(BASE_DIR, 'frontend/dist/static')] - 基础模板中引入Vue构建文件:
<script src="{% static 'js/app.js' %}"></script>
开发模式联调:
- Vue开发服务器配置代理,修改
vue.config.js:devServer: { proxy: 'http://localhost:8000' } - Django运行于8000端口,Vue运行于8080端口,通过代理解决跨域。
部署优化方案
生产环境部署:
- Django使用
WhiteNoise管理静态文件,在settings.py中:MIDDLEWARE = ['whitenoise.middleware.WhiteNoiseMiddleware'] STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') - 使用Nginx同时代理Django和Vue静态文件,配置示例:
location /static { alias /path/to/staticfiles; } location / { try_files $uri /index.html; }
代码组织结构:
project/
├── backend/ # Django项目
│ ├── api/ # DRF接口
│ └── settings.py
└── frontend/ # Vue项目
├── public/
└── src/
常见问题解决
静态文件加载问题:
- 确保Django的
collectstatic命令正确执行,Vue构建时设置publicPath为/static/。
CSRF验证处理:
- 对于DRF接口,在Vue中使用
axios全局配置:axios.defaults.xsrfCookieName = 'csrftoken' axios.defaults.xsrfHeaderName = 'X-CSRFToken'
热更新开发:

- 同时运行Django服务器和Vue开发服务器,通过代理配置实现实时调试。






