导读:本篇文章首席CTO笔记来给大家介绍有关如何把django项目打包的相关内容,希望对大家有所帮助,一起来看看吧。
Django+Vue静态资源问题
使用 django 2.2。
一般来说,使用指令 npm run build 得到打包的 dist 包,交给 nginx 做路由转换(配置 location /static )即可,需要的只是在django配置可访问的 index.html 路径。
但是由于需要(?), 我想在本地进行测试,也就是说在没有 nginx, 开启 debug = True 的环境下调试。于是打开 python manage.py runserver , 结果进入首页没有出现欢迎页面,打开 dev tools ,显示是这个样子的:
解决方法:将 vue 工程文件夹在 INSTALLED_APPS 里面注册下就行。
如果不注册 app, 那么即使写入文件夹, django 也不会扫描(根目录除外):
如上所示我在 STATICFILES_DIR 中已经写入了 blogfro (也就是 vue 文件目录) 打包完成后的 static 文件夹,但是进入首页仍然白屏。
白屏表示模板 TEMPLATES 的路径正常,但是静态文件仍然加载不出来。这就需要注册 app 。注册后就能够扫描到静态文件。
注册后就成功显示了首页:
在没有加载 app时,发现把 css 与 js 文件放在一个已经注册 app(backend)的静态文件夹中,能够正常显示。这验证了静态文件夹的扫描需要注册 app。
以我的项目为例:
在 debug 模式下,只需要 STATIC_URL 与 STATICFILES_DIR 即可。
根据 django 文档 说法, STATIC_URL 是路径的映射。服务器会将匹配到它的路径视为静态文件请求,然后进入 STATICFILES_DIR 指定目录下查找,并总是尝试返回匹配到的第一个结果。
在生产模式下(关闭 debug ),对静态文件的引用会失效。换句话说,出于性能考虑,我们不使用django服务器进行静态资源请求。我们常使用其他反代服务器进行发送。
出于这个考虑,django 使用了 collectstatic 指令,能将所有 STATICFILES_DIR 下的文件打包到 STATIC_ROOT 下。之后只要配置反代服务器应用这个静态文件夹就行了。
之后就能直接对 blogfro 进行开发了,开发完成后使用 npm run build , 然后直接开启 django 服务器就能进行测试。最后打包上线的时候将dist下的内容复制到到 STATIC_ROOT 下,然后 python manage.py collectstatic (主要是收集 admin )的资源。
其实问题不是完全解决,但这是因为 vue + django 造成的。
django 使用自己的静态路径索引,必然有可能与vue发生冲突,为了处理必须进行调试。
使用 django 与 vue, 意味着希望进行前后端分离,所以开发过程本身就是隔离的。双方的交集应该是最后部署的时候(vue 打包, django 开启生产模式, 反代服务器开启(如 nginx))。这时候静态文件夹归反代服务器管理,不会出现这样的问题。
由于我只有一个人(太惨了),所以产生了同时调试 vue 与 django 的需求,这才导致了上面问题的产生。
django+vue前后端分离项目部署
后端用的drf,使用的是uwsgi+nginx
进入服务器项目文件目录下,我的django项目放在了“/usr/myProjects/”目录下了。在manage.py同级目录下创建uwsgi.ini文件,配置如下:
测试效果命令:
如果访问:xxx.xxx.xxx.xx:8000 成功, 则uwsgi.ini配置成功
我的nginx.conf所在位置是“/etc/nginx/nginx.conf”
配置文件如下:
1、第一行
主要就是给nginx加权限,vue部署后使用history路由时会去掉地址后面的‘#’号,打包部署后不加权限会有bug。
2、如配置所示,有两个Server,分别部署了前端服务,和后端服务,值得注意的是两个Server用的是同一个服务器,监听的端口不同。
3、vue部署需要注意的是反向代理地址:
以及后面的端口问题
4、后端的Server需要注意location中的uwsgi_pass 后面的端口号要和uwsgi.ini中配的相同,否则监听不到
5、后端跨域问题。如果遇到跨域需要自己网上找配置,我的没遇到,可能是因为我在django的settings中配置了跨域。
6、django-suit后台管理样式崩了,需要改,但是api可以正常访问,这个有空再说
7、我开始后台监听的是8008端口,vue前端监听的是80端口,这样前端显示好看。然而问题出现了,虽然后台api可以正常访问,vue的本地开发环境也能正常运行且文字、图片资源均显示正常,但是前端vue打包线上部署后,文字信息显示正常,图片信息缺失8008端口,导致显示不出来。为图方便我选择了前端监听8008端口,后端监听80,部署后显示正常。原因不太清楚///////有空再说吧。
8、不要问我为啥都前后端分离了还部署到一个服务器上?穷,而且只是测试,没必要
9、此文仅适合入门
关于django后台admin(suit)缺失的修改(参考:django中文网: )
在环境中进入项目目录,需要收集css样式,在终端输入命令:
接下来你就回发现static文件中包含了css文件,此时再打开网站,样式显示正常
uWSGI 通过 xxx.ini 启动后会在相同目录下生成一个 xxx.pid 的文件,里面只有一行内容是 uWSGI 的主进程的进程号。
关于uwsgi,进入同届目录下
教训
获取不到环境,那就指定环境
另外:记得重启uwsgi,重启Nginx,实在不行就先把监听的端口kill掉再重启
暴力删端口:fuser -k 80/tcp
netstat -aptn命令行,查看所有开启的端口号
netstat -ntlp | grep 80 查看具体的端口是否使用
ps -ef | grep uwsgi 查看是否有uwsgi端口存在
如何打包发布django
建议下载这个打包软件:InnoSetup,使用简单,功能强大,而且体质很小。
如何在服务器上部署Django项目并使其在后台一直运行
前几天老师让我把一个Django项目(爬虫网页)放到校园内网上,但是我想先用自己的服务器来尝试一下。之前刚好有在Digital Ocean上买过服务器用来运行ss脚本,平时服务器一直放着没啥用,所以就拿它来试验一下。
废话不多说,第一步通过WinSCP软件把Django文件传到服务器上。
在服务器中安装Django需要的环境和我所需要的Python第三方库。
以上所有步骤完成后,还需要进行一步操作,这是我经历的一个 坑 。 打开Django文件目录中的 settings.py ,把 ALLOWED_HOSTS=[] 改为 ALLOWED_HOSTS=["*"] 。
在服务器中打开到 manage.py 所在的目录,输入命令:
python3 manage.py runserver 0.0.0.0:8000
然后按下回车,在浏览器中输入: 该服务器IP地址:8000 ,大功告成!
Attention:
1. python3 不是特定的,是根据你的Django项目所需要的环境指定的。
2. 8000 是端口号,可以修改。
如果想要Django项目一直运行,关闭终端后还在运行,即需要运行如下命令, nohup command , command 即位上文所说的 python3 manage.py runserver 0.0.0.0:8000 。
如何将Django项目部署到阿里云服务器上
1,APP应用需要什么样的云服务器? 为了帮助大家了解如何使用阿里云云服务器及相关应用,阿里云的移动云团队开发了一个简单的APP应用:移动云相册,其中使用了ECS主要用作部署云相册的API服务(图片信息调用、图片列表调用)和图片缩略图处理,因为这个应用服务端使用了JAVA语言开发,因此在上面安装tomcat来部署应用。 具体部署 1)远程登录: 第一次购买ECS后,会把该ECS服务器的root账号、密码发送购买者的邮箱,然后购买者可以通过远程登录到ECS服务器,具体远程登录可以参考如下: Windows:中国//help.aliyun中国/manual?spm=5176.383518.5.16.4lLZznhelpId=59 Linux:中国//help.aliyun中国/manual?spm=5176.383518.5.16.4lLZznhelpId=59 2)安装web环境 根据自己应用特点选择安装相关web服务器tomcat或者jetty,阿里云提供了一条龙安装部署脚本,为开发者提供了更多的方便,请参考如下链接:中国//help.aliyun中国/manual?spm=0.0.0.0.RGeYy4helpId=129 3)打包应用 将web源码下载到本地,使用命令mvnpackage打成war包。如果不是maven工程,可以用类似ant打成war包。 4)上传war包 Linux下面可以使用sftp上传war包,上传war包到指定目录后进行解压,具体使用方式参考:中国//help.aliyun中国/manual?spm=0.0.0.0.PnfpSLhelpId=1848 5)启动web服务 将tomcat或jetty服务启动 6)配置反向中国、绑定域名 具体配置信息参考:中国//help.aliyun中国/manual?spm=0.0.0.0.Ti7iuAhelpId=532, 中国//help.aliyun中国/manual?spm=0.0.0.0.MKbFj1helpId=65 2,APP应用如何把图片存到云存储服务器中? 图片类APP应用的架构核心在于大量小文件的存储与访问,在文件数量较多的情况下将文件直接存储在硬盘上将极大影响应用的访问效率。阿里云存储服务OSS对海量小文件的存储及管理具有很大优势,图片不从服务端下载,减少了服务端压力。阿里云的OSS的备份机制也保证了文件的存储安全,其存储容量可以无限扩展,每秒请求数超过50000次,多线BGP中国络确保全国各地访问流畅。 使用阿里云OSS步骤: 1)登录阿里云官中国(aliyun中国)开通OSS 2)获取KEY及密钥 3)下载SDK (JAVA版下载地址为:中国//bbs.aliyun中国/job.php?action=downloadaid=38817 帮助手册: 中国//aliyun_portal_storage.oss.aliyuncs中国/oss_api/oss_javahtml/index.html ) 4)开始APP开发 很简单吧,下面是一个使用阿里云的OSS上传图片的代码样例: StringupLoadURI = OSSClient.generateUploadUrl(Constants.SERVER_URL.GENERATE_URL,fileName, null); int status =OSSClient.uploadFile(upLoadURI, path); 3,APP上云后如何使用云数据库? 为了帮助大家了解如何使用阿里云云服务器及相关应用,阿里云的移动云团队开发了一个简单的APP应用:移动云相册,其中使用了RDS中提供的MYSQL服务,数据库中主要存储了用户上传的图片信息,包括原图、缩略图的信息及存储地址,通过WEB端API向客户端提供数据调用。 使用阿里云RDS和使用本地数据库基本上没有区别,使用样例如下: 1)创建数据库实例 使用阿里云账号购买RDS后,可以创建数据库实例。 2)创建数据库以及管理账号 创建数据库名称以及管理账号,用于应用程序调用数据库连接。 3)访问数据库: 创建完数据库(test)后,在数据库test里添加账户:test、密码:test,可以在RDS控制台查看到数据库相关信息,从中能够得到数据库的外中国地址如:xxxx.mysql.rds.aliyuncs中国,可以使用应用程序连接数据库,javajdbc连接数据库示例代码如下: String url = “jdbc:mysql://xxxx.mysql.rds.aliyun:3306/test”; String username = “test” ; String password = “test” ; try{ Connection con = DriverManager.getConnection(url ,username , password ) ; }catch(SQLException e){ e.printStackTrace() ; //需要对异常做处理
如何将 django 1.7 程序打包成 exe 程序
.官网下载对应的pyinstall 工具, 我下载的是 PyInstaller-3.2.1.zip 并解压
2.通过cmd 跳转到pyinstaller目录 并执行 setup.py install 进行安装. 这时会向你的python路径安装必要的第三方包,当然细节可以不用关心
3. 安装成功后 就可以使用了。
TK-GUI.py是我的源程序
结语:以上就是首席CTO笔记为大家整理的关于如何把django项目打包的相关内容解答汇总了,希望对您有所帮助!如果解决了您的问题欢迎分享给更多关注此问题的朋友喔~