部署React前端和Django后端的3种方法
off999 2024-10-19 07:12 37 浏览 0 评论
如果您要用Django REST开发web应用程序后端,并使用React或Vue开发应用程序前端。有很多方法实现。你需要做出很多选择:
您的前端是独立的静态站点还是通过Django视图实现?
你把后端和前端放在不同的子域上吗?
您是单独部署后端和前端,还是一起部署?
你怎么选择?哪一种是“正确的方式”?
坏消息是,没有正确的方式来做这件事,而且有很多东西要权衡。好消息是,我整理了三种不同的常见选择,各有利弊。
选项1-将所有内容塞进Django
这是“默认”方法,您有一个Django站点,只需添加React即可。所有HTML都通过Django视图提供,所有JavaScript和CSS都由Django负责打包,并以静态文件的形式部署。所有代码,前端和后端,都在一个Git存储库中。您可以在单个域(如www.myapp.com)部署应用程序。
部署代码时,需要:
使用webpack或类似的工具构建JavaScript和CSS资源,并将它们放入Django静态文件目录
像往常一样部署Django
您将需要使用类似django webpack loader的东西来集成webpack的构建资源和django的静态文件系统和模板。除此之外,这是一个普通的Django部署。
优点是:
最简单的基础设施。除了设置django webpack loader和在部署过程开始时添加webpack构建之外,您无需对生产结构执行任何其他操作。没有额外的创建,费用,配置,调试或焦虑。
同时更新。如果您需要做出影响前端和后端的更改,那么您可以在一次Git提交中完成所有更改,并使用单个部署将更改导入生产环境。
更紧密的整合。通过此设置,您可以使用Django的视图通过模板将上下文数据从后端传递到前端。此外,还可以进行服务器端渲染(使用NodeJS进行额外的处理)。
缺点是:
前端和后端的单一部署。通常您只想在前端部署一个小的CSS或内容更改,或者只部署后端更改。通过此设置,您必须始终同时部署后端和前端。这意味着您需要等待前端生成,即使您没有进行任何前端更改!更糟糕的是,如果您使用持续集成实践,则其他代码库中的失败测试或linter错误可能会导致部署失败。您不希望仅仅因为有人忘记在JavaScript中使用分号而导致数据库迁移部署失败。
混乱的技术堆栈。后端开发人员需要知道一点React,前端开发人员需要知道一点Django才能使这个系统工作。
精密的django网页包加载程序。在Webpack和Django之间建立集成对我来说是一个痛苦的过程。我不记得为什么,我只记得痛苦。事实上,这个列表中的每一个选项都会导致你想在某个时刻把你的计算机扔出窗口,而这个也不例外。
适用于:
你想让你的基础设施保持简单
你不在乎部署时间
通常将前端和后端一起部署
您需要在前端和后端之间进行紧密集成(例如,数据传递、服务器端呈现)
选项2-完全独立的基础设施
这种方法在过去几年中变得越来越流行。在这个设置中,您有两个独立的代码库,一个用于前端,一个用于后端,每个都有自己的Git存储库。
前端部署为一个“静态站点”,仅包含HTML CSS和JavaScript文件。它与Django分别部署,部署在在AWS S3 bucket、Netlify或类似的东西中。前端是独立于后端构建、测试和部署的。前端通过REST API调用从后端获取数据。
后端是一个Django REST API,没有HTML视图(除了管理页面),并且不承载静态内容(除了admin所需的内容)。它是独立于后端构建、测试和部署的。
重要的是,由于前端和后端在不同的服务器上,它们也将有不同的域名。后端可能位于api.myapp.com上,前端可能位于www.myapp.com上。
优点是:
独立部署。部署前端时不需要等待后端,反之亦然。
关注点分离。后端开发人员只需要考虑API,而不需要考虑视图或CSS。前端开发人员只需要考虑后端提供的API,而不需要考虑Django的内部工作。您可以使用选项1来实现这一点,但此方法会更严格地执行它。
如果后端坏了,前端仍然可以工作。您的用户仍会遇到错误,但网站不会彻底没有响应。
安全权限可以拆分。您可以允许部署前端与后端的人员分开,这通常意味着更多的人将有部署权限,从而使您的团队更具生产力。
缺点是:
更多的基础设施。您将需要设置和维护静态站点,外加一个额外的部署过程,这将需要更多的工作,更复杂。
跨域困境。您遇到了更多问题,因为前端与后端位于不同的子域上。您需要对Django进行一些额外配置,以允许前端正确地与后端对话。显然这是安全问题。如果不解决这个问题,您可能会遇到向后端发出API请求、接收cookies等问题。我不太明白。我不想太明白。我有比找出SESSION_COOKIE_DOMAIN,CORS_ORIGIN_REGEX_WHITELIST和friends的正确值更重要的事情要做。更糟糕的是,跨域问题不会出现在您的本地计算机上,因为一切都是从本地主机提供的,所以您需要在知道配置是否正确之前部署配置。
以下是一些跨域Django设置,希望您永远不需要考虑:
SESSION_COOKIE_DOMAIN
CSRF_COOKIE_DOMAIN
CSRF_TRUSTED_ORIGINS
CORS_ORIGIN_ALLOW_ALL
CORS_ALLOW_CREDENTIALS
CORS_ORIGIN_REGEX_WHITELIST
适用于:
您有独立的前端和后端开发人员
要分别部署后端和前端
您希望完全分离后端和前端基础结构
您不介意再增加一点操作复杂性和配置
选项3-一台服务器,单独部署
这种方法试图融合方案1和2。我们的想法是仍然将前端部署为一个单独的静态站点,但是您可以将所有内容部署到一个服务器上,使用一个域名:
后端和前端分别有两个独立的代码库
两个代码库都是独立部署的,但是部署到同一个服务器上
两个代码库都托管在一个域上,如www.myapp.com
您可以使用一个web服务器来管理它,比如NGINX,它处理所有传入的请求。对URL path/api/get的请求被转发到运行Django应用程序(传统的反向代理设置)的WSGI服务器,而所有其他请求发送到前端,前端被设置为静态站点并限定访问的路径(例如/var/www/)。
优点是:
方案2的大部分好处。分离关注点和独立部署仍然是可行的。
没有“跨域困境”。因为所有的请求都是从一个域发出的,所以您不必在Django中处理那些可怕的跨域设置。
缺点是:
更多的基础设施。这个设置仍然比“将所有内容塞进Django”选项更复杂。
需要完全控制主机Web服务器。您需要能够安装和配置NGINX,将文件部署到文件系统等来完成这项工作。如果您使用的是典型的云虚拟机,这很简单,但如果您使用的是Heroku之类的东西,则可能会更加棘手(不确定)。
适用于:
你想把前端和后端分开,但你不需要完全分离基础设施
您对主机Web服务器有足够的控制权限
实际上,我从未尝试过选项3(我以前使用过1+2)。我是在回复Reddit的帖子时想到的。不过,我想它会起作用的。祝你好运!
英文原文:https://mattsegal.dev/django-spa-infrastructure.html
译者:阿布铥
相关推荐
- 安全教育登录入口平台(安全教育登录入口平台官网)
-
122交通安全教育怎么登录:122交通网的注册方法是首先登录网址http://www.122.cn/,接着打开网页后,点击右上角的“个人登录”;其次进入邮箱注册,然后进入到注册页面,输入相关信息即可完...
- 大鱼吃小鱼经典版(大鱼吃小鱼经典版(经典版)官方版)
-
大鱼吃小鱼小鱼吃虾是于谦跟郭麒麟的《我的棒儿呢?》郭德纲说于思洋郭麒麟作诗的相声,最后郭麒麟做了一首,师傅躺在师母身上大鱼吃小鱼小鱼吃虾虾吃水水落石出师傅压师娘师娘压床床压地地动山摇。...
-
- 哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)
-
要想将ppt免费转换为pdf的话,我们建议大家可以下一个那个wps,如果你是会员的话,可以注册为会员,这样的话,在wps里面的话,就可以免费将ppt呢转换为pdfpdf之后呢,我们就可以直接使用,不需要去直接不需要去另外保存,为什么格式转...
-
2026-02-04 09:03 off999
- 电信宽带测速官网入口(电信宽带测速官网入口app)
-
这个网站看看http://www.swok.cn/pcindex.jsp1.登录中国电信网上营业厅,宽带光纤,贴心服务,宽带测速2.下载第三方软件,如360等。进行在线测速进行宽带测速时,尽...
- 植物大战僵尸95版手机下载(植物大战僵尸95 版下载)
-
1可以在应用商店或者游戏平台上下载植物大战僵尸95版手机游戏。2下载教程:打开应用商店或者游戏平台,搜索“植物大战僵尸95版”,找到游戏后点击下载按钮,等待下载完成即可安装并开始游戏。3注意:确...
- 免费下载ppt成品的网站(ppt成品免费下载的网站有哪些)
-
1、Chuangkit(chuangkit.com)直达地址:chuangkit.com2、Woodo幻灯片(woodo.cn)直达链接:woodo.cn3、OfficePlus(officeplu...
- 2025世界杯赛程表(2025世界杯在哪个国家)
-
2022年卡塔尔世界杯赛程公布,全部比赛在卡塔尔境内8座球场举行,2022年,决赛阶段球队全部确定。揭幕战于当地时间11月20日19时进行,由东道主卡塔尔对阵厄瓜多尔,决赛于当地时间12月18日...
- 下载搜狐视频电视剧(搜狐电视剧下载安装)
-
搜狐视频APP下载好的视频想要导出到手机相册里方法如下1、打开手机搜狐视频软件,进入搜狐视频后我们点击右上角的“查找”,找到自已喜欢的视频。2、在“浏览器页面搜索”窗口中,输入要下载的视频的名称,然后...
- 永久免费听歌网站(丫丫音乐网)
-
可以到《我爱音乐网》《好听音乐网》《一听音乐网》《YYMP3音乐网》还可以到《九天音乐网》永久免费听歌软件有酷狗音乐和天猫精灵,以前要跳舞经常要下载舞曲,我从QQ上找不到舞曲下载就从酷狗音乐上找,大多...
- 音乐格式转换mp3软件(音乐格式转换器免费版)
-
有两种方法:方法一在手机上操作:1、进入手机中的文件管理。2、在其中选择“音乐”,将显示出手机中的全部音乐。3、点击“全选”,选中所有音乐文件。4、点击屏幕右下方的省略号图标,在弹出菜单中选择“...
- 电子书txt下载(免费的最全的小说阅读器)
-
1.Z-library里面收录了近千万本电子书籍,需求量大。2.苦瓜书盘没有广告,不需要账号注册,使用起来非常简单,直接搜索预览下载即可。3.鸠摩搜书整体风格简洁清晰,书籍资源丰富。4.亚马逊图书书籍...
- 最好免费观看高清电影(播放免费的最好看的电影)
-
在目前的网上选择中,IMDb(互联网电影数据库)被认为是最全的电影网站之一。这个网站提供了各种类型的电影和电视节目的海量信息,包括剧情介绍、演员表、评价、评论等。其还提供了有关电影制作背后的详细信息,...
- 孤单枪手2简体中文版(孤单枪手2简体中文版官方下载)
-
要将《孤胆枪手2》游戏的征兵秘籍切换为中文,您可以按照以下步骤进行操作:首先,打开游戏设置选项,通常可以在游戏主菜单或游戏内部找到。然后,寻找语言选项或界面选项,点击进入。在语言选项中,选择中文作为游...
欢迎 你 发表评论:
- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
