Python前后端分离开发:Django与Vue.js实战指南
1. 项目概述Python 100天从新手到大师系列的第53天聚焦于前后端分离开发模式的入门与实践。这个阶段标志着学习者从传统单体架构向现代Web开发范式的关键转变。作为全栈开发的核心技能点前后端分离不仅是技术架构的升级更是开发思维和工作流程的革新。在传统Web开发中Django这类框架通常采用服务端渲染(SSR)模式前后端代码高度耦合。而现代开发实践中Vue.js等前端框架的崛起使得前后端可以完全解耦通过API进行数据交互。这种分离带来了开发效率、团队协作和系统可维护性的全面提升。2. 前后端分离的核心概念2.1 传统与分离架构对比传统MVC架构中Django同时处理业务逻辑和页面渲染# views.py (传统方式) def product_list(request): products Product.objects.all() return render(request, shop/list.html, {products: products})前后端分离后Django仅提供JSON数据# views.py (分离方式) from rest_framework.response import Response def product_list_api(request): products Product.objects.all() serializer ProductSerializer(products, manyTrue) return Response(serializer.data)2.2 技术栈选择考量后端选择Django REST framework(DRF)的三大理由与Django无缝集成复用现有模型和认证系统内置强大的序列化器和视图类减少样板代码完善的文档和社区支持降低学习曲线前端选择Vue.js的关键优势渐进式框架设计可按需引入功能响应式数据绑定简化DOM操作丰富的生态系统(Vuex, Vue Router等)3. 项目环境搭建3.1 后端环境配置使用Poetry管理Python依赖(比pip更优的选择)poetry init poetry add django djangorestframework django-cors-headers关键配置项说明# settings.py INSTALLED_APPS [ ... rest_framework, corsheaders, ] MIDDLEWARE [ corsheaders.middleware.CorsMiddleware, # 必须放在最前 ... ] CORS_ALLOWED_ORIGINS [ http://localhost:8080, # Vue开发服务器地址 ]3.2 前端环境准备推荐使用Vite创建Vue项目(比Vue CLI更快)npm create vitelatest frontend --template vue cd frontend npm install axios vue-router pinia项目结构建议frontend/ ├─ public/ ├─ src/ │ ├─ api/ # API请求封装 │ ├─ assets/ │ ├─ components/ │ ├─ router/ # 路由配置 │ ├─ stores/ # Pinia状态管理 │ └─ views/ # 页面组件 └─ vite.config.js4. 核心功能实现4.1 RESTful API设计DRF中的视图集(ViewSets)最佳实践# views.py from rest_framework import viewsets class ProductViewSet(viewsets.ModelViewSet): queryset Product.objects.all() serializer_class ProductSerializer def get_queryset(self): queryset super().get_queryset() category self.request.query_params.get(category) if category: queryset queryset.filter(categorycategory) return queryset路由配置优化# urls.py from rest_framework.routers import DefaultRouter router DefaultRouter() router.register(rproducts, ProductViewSet) urlpatterns [ path(api/, include(router.urls)), ]4.2 前端数据交互封装axios实例实现统一错误处理// api/request.js import axios from axios const service axios.create({ baseURL: http://localhost:8000/api, timeout: 5000 }) service.interceptors.response.use( response response.data, error { console.error(API Error:, error.response) return Promise.reject(error) } ) export default service组合式API调用示例// api/product.js import request from ./request export const getProducts (params) request.get(/products, { params }) export const createProduct (data) request.post(/products, data)5. 开发调试技巧5.1 接口调试工具链推荐使用PostmanSwagger的双工具方案安装drf-yasg生成Swagger文档poetry add drf-yasg配置自动API文档# urls.py from drf_yasg.views import get_schema_view from drf_yasg import openapi schema_view get_schema_view( openapi.Info(titleAPI Docs, default_versionv1), publicTrue, ) urlpatterns [ ... path(swagger/, schema_view.with_ui(swagger)), ]5.2 跨域问题深度解决除基本CORS配置外还需注意开发环境下配置代理避免跨域// vite.config.js server: { proxy: { /api: { target: http://localhost:8000, changeOrigin: true, rewrite: path path.replace(/^\/api/, ) } } }生产环境Nginx配置示例location /api { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }6. 项目部署策略6.1 后端部署要点使用GunicornNginx的生产级部署# 安装Gunicorn poetry add gunicorn # 启动命令 gunicorn --bind 0.0.0.0:8000 --workers 4 project.wsgi:application关键Nginx配置location /static/ { alias /path/to/staticfiles/; expires 30d; } location /media/ { alias /path/to/media/; expires 30d; } location /api { include proxy_params; proxy_pass http://unix:/run/gunicorn.sock; }6.2 前端部署优化Vite生产构建命令npm run build部署优化建议开启Brotli压缩// vite.config.js import viteCompression from vite-plugin-compression plugins: [ viteCompression({ algorithm: brotliCompress }) ]配置CDN加速静态资源build: { rollupOptions: { output: { chunkFileNames: assets/[hash].js, assetFileNames: assets/[hash][extname] } } }7. 常见问题解决方案7.1 认证与权限控制JWT认证实现方案# settings.py REST_FRAMEWORK { DEFAULT_AUTHENTICATION_CLASSES: ( rest_framework_simplejwt.authentication.JWTTokenUserAuthentication, ) } # urls.py from rest_framework_simplejwt.views import TokenObtainPairView urlpatterns [ path(api/token/, TokenObtainPairView.as_view()), ]前端Token处理// 请求拦截器 service.interceptors.request.use(config { const token localStorage.getItem(access_token) if (token) { config.headers.Authorization Bearer ${token} } return config })7.2 性能优化实践数据库查询优化技巧# 使用select_related减少查询次数 queryset Product.objects.select_related(category).all() # 使用prefetch_related优化多对多关系 queryset Order.objects.prefetch_related(items__product)前端懒加载实现// 路由懒加载 const ProductList () import(../views/ProductList.vue) // 图片懒加载 img v-lazyproduct.image altproduct8. 项目进阶方向8.1 微服务架构演进从单体到微服务的过渡策略先按功能模块拆分API服务引入API Gateway统一入口逐步将共享模型拆分为独立服务8.2 实时功能扩展WebSocket集成方案# 安装Channels poetry add channels # routing.py from channels.routing import ProtocolTypeRouter from django.core.asgi import get_asgi_application application ProtocolTypeRouter({ http: get_asgi_application(), websocket: AuthMiddlewareStack( URLRouter([ path(ws/notifications/, NotificationConsumer.as_asgi()), ]) ), })前端连接示例const socket new WebSocket(ws://localhost:8000/ws/notifications/) socket.onmessage (e) { const data JSON.parse(e.data) // 处理实时通知 }前后端分离开发模式的学习曲线可能会让初学者感到有些陡峭特别是在处理跨域、状态管理和API设计等方面。建议从简单的CRUD功能开始实践逐步添加认证、分页、过滤等复杂功能。在实际项目中保持API文档与代码同步更新是团队协作的关键。

相关新闻

密码杂凑算法XuanWu512设计原理详解

密码杂凑算法XuanWu512设计原理详解

密码杂凑算法XuanWu512设计原理详解 什么是密码杂凑算法? 密码杂凑算法是一类单向压缩算法,它的输入为任意长度(通常为不大于2^64位,2^128位,2^256位)的一段消息,输出为固定长度(通常为128位,160位&#x…

2026/8/1 22:49:14 阅读更多 →
数据结构-Trie、并查集、堆

数据结构-Trie、并查集、堆

Trie通常有两种写法&#xff0c;一种是竞赛常用的数组表示&#xff0c;另一种问更直观的结构体表示数组&#xff1a;acwing835void insert(string& str) {int curr 0;for (int i 0; i < str.size(); i){if (!son[curr][str[i] - a])son[curr][str[i] - a] index; //一…

2026/8/1 22:49:14 阅读更多 →
证券公司智能运维平台哪个品牌做得好?擎创科技智能运维 2.0 适配券商全场景

证券公司智能运维平台哪个品牌做得好?擎创科技智能运维 2.0 适配券商全场景

证券行业行情、交易系统承载海量实时业务&#xff0c;系统卡顿、故障中断会直接影响客户交易体验&#xff0c;同时伴随严格监管核查要求。当下多数券商运维体系面临多重难题&#xff1a; 多套监控、日志、链路工具独立部署形成数据孤岛&#xff0c;每日海量告警淹没关键故障&am…

2026/8/1 22:48:14 阅读更多 →

最新新闻

基于Python的B站视频下载技术方案:实现高效批量下载与画质选择

基于Python的B站视频下载技术方案:实现高效批量下载与画质选择

基于Python的B站视频下载技术方案&#xff1a;实现高效批量下载与画质选择 【免费下载链接】bilibili-downloader B站视频下载&#xff0c;支持下载大会员清晰度4K&#xff0c;持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader bilibili-d…

2026/8/1 23:32:29 阅读更多 →
2026主流大模型自主智能体产品清单:10款桌面Agent一次看全

2026主流大模型自主智能体产品清单:10款桌面Agent一次看全

2026年&#xff0c;AI行业最清晰的一条主线&#xff0c;无疑是Agent产品的全面爆发。从“对话式AI”到“自主执行式AI”&#xff0c;行业正经历一次深层范式跃迁。然而在真实工作中&#xff0c;“知道怎么做”和“真正把事情做完”之间仍然存在巨大的距离。DanaAgent 的产品重心…

2026/8/1 23:32:29 阅读更多 →
思源宋体完全指南:7种字重开源字体深度解析与实战应用

思源宋体完全指南:7种字重开源字体深度解析与实战应用

思源宋体完全指南&#xff1a;7种字重开源字体深度解析与实战应用 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为中文排版设计寻找既专业又完全免费的开源字体解决方案吗&#…

2026/8/1 23:32:29 阅读更多 →
家纺护理标签 Global Textile Care Label Industry Market Trends 2026

家纺护理标签 Global Textile Care Label Industry Market Trends 2026

观点&#xff5c;护理标签正在成为家纺供应链的信息接口过去&#xff0c;家纺护理标签被视为生产环节中的低价值配件。但随着纺织产品生命周期管理、全球贸易合规要求以及供应链透明化需求不断提高&#xff0c;护理标签正在发生角色变化。它不再只是告诉消费者“如何洗涤”&…

2026/8/1 23:32:29 阅读更多 →
革命性JavaScript像素艺术库:一键实现图片像素化转换的艺术创作

革命性JavaScript像素艺术库:一键实现图片像素化转换的艺术创作

革命性JavaScript像素艺术库&#xff1a;一键实现图片像素化转换的艺术创作 【免费下载链接】pixelit Create pixel art from an image 项目地址: https://gitcode.com/gh_mirrors/pi/pixelit 在数字艺术创作领域&#xff0c;像素艺术以其独特的复古魅力和艺术价值备受…

2026/8/1 23:32:29 阅读更多 →
D2DX终极指南:让暗黑破坏神2在现代PC上焕然新生的深度解析

D2DX终极指南:让暗黑破坏神2在现代PC上焕然新生的深度解析

D2DX终极指南&#xff1a;让暗黑破坏神2在现代PC上焕然新生的深度解析 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 还在为…

2026/8/1 23:31:29 阅读更多 →

日新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速&#xff1a;macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南&#xff1a;3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗&#xff1f;ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片&#xff1a;为英语学习 App 打造桌面级学习助手适用平台&#xff1a;HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0&#xff08;API 26 Beta&#xff09;新增了 AgentCard 智能体卡片能力&#xff0c;这是继 HMAF&#xff08;鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档&#xff0c;可以直接使用&#xff01;系统支持图片、视频、摄像头等多种方式检测裂缝&#xff0c;功能强大实用。 1数据集6000张 8各类别

2026/8/1 13:02:46 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像&#xff01; pubg绝地求生目标检测数据集 1分类&#xff1a;e_body&#xff0c;14905个标签&#xff0c;txt格式 共计14244张图&#xff0c;99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/8/1 5:19:34 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别&#xff1a; allies enemy tag图片总量&#xff1a;7247张训练集&#xff1a;5139张验证集&#xff1a;1425张测试集&#xff1a;683张标注状态&#xff1a;全部已标注&#xff0c;即拿即用数据格式&#xff1a;支持YOLO格式及其他格式&#…

2026/8/1 10:33:33 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速&#xff1a;macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南&#xff1a;3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗&#xff1f;ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片&#xff1a;为英语学习 App 打造桌面级学习助手适用平台&#xff1a;HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0&#xff08;API 26 Beta&#xff09;新增了 AgentCard 智能体卡片能力&#xff0c;这是继 HMAF&#xff08;鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →