Django打包发布
安装pyinstaller
pip install pyinstaller
制作项目的.spec文件
进入django项目所在路径,运行
pyi-makespec -D manage.py
在路径下,生成一个.spec文件
在.spec文件中,注意hiddenimports=[“pyexpat”]
pyinstaller manage.spec
打包以后图片不能加载
步骤1:在settings.py文件的最后加上以下内容:
STATIC_URL = ‘/static/’
STATIC_ROOT = os.path.join(os.path.dirname(file),‘static’)
#设置图片等静态文件的路径
STATICFILES_DIRS = (
(‘css’,os.path.join(STATIC_ROOT,‘css’).replace(’\’,’/’) ),
(‘js’,os.path.join(STATIC_ROOT,‘js’).replace(’\’,’/’) ),
(‘images’,os.path.join(STATIC_ROOT,‘images’).replace(’\’,’/’) ),
(‘upload’,os.path.join(STATIC_ROOT,‘upload’).replace(’\’,’/’) ),
)
步骤2:在urls.py文件的开头第一行和第二行分别加上以下内容:
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.contrib import staticfiles
在urls.py文件最后加上以下内容:
#设置静态文件路径
urlpatterns += staticfiles_urlpatterns()
步骤3:设置静态文件的目录,很关键
整个文件的目录结构如下
project—project
—app
|
----static
|
-----templates
你的static和templates处于同级目录,然后将你的images,css,js文件夹放在static目录下面
测试:在你模板,也就是html文件中
IIS上通过wfastcgi发布。
1、 申请云服务器,我申请的是腾讯云的windows。
2、 在安全组里添加规则,来源填:0.0.0.0/0;端口填TCP:8000;如此循环,加上TCP:80;TCP:82;TCP:3306
3、 安装wfastcgi。在python.exe所在的目录下,输入pip install wfastcgi。然后cmd重定位/scripts/文件夹下,输入wfastcgi-enable。
4、 然后把wfastcgi.py文件拷贝到项目根目录下,、与manage.py同目录。在wfastcgi.py头部增加:
import django
os.environ.setdefault(“DJANGO_SETTINGS_MODULE”, “项目中app的名称.settings”)
django.setup()
5、 IIS添加网站,IIS的安装方法网上很多教程,此处略去。
6、 右击IIS左侧下拉菜单中的网站,选择添加网站
输入网站名称,配置好网站的物理路径,端口号,确定进入。
7、 在网站主页对应的控制台里,选择处理程序映射
双击进入,然后在右面菜单列表中点击“添加模块映射”
注:
IIS7.0 部署异常 【不能在此路径中使用此配置节。如果在父级别上锁定了该节,便会出现这种情况】解决方法
因为 iis 7 采用了更安全的 web.config 管理机制,默认情况下会锁住配置项不允许更改。
运行命令行 %windir%\system32\inetsrv\appcmd unlock config -section:system.webServer/handlers 。
其中的 handlers 是错误信息中红字显示的节点名称。
如果modules也被锁定,
可以运行%windir%\system32\inetsrv\appcmd unlock config -section:system.webServer/modules
注意:cmd.exe要以管理员身份启动,在c:\windows\system32下找到cmd.exe,
右键管理员启动,输入上面的命令即可。
处理程序映射不能正常打开时,亦是如此处理!
如果出现:处理程序“ExtensionlessUrlHandler-Integrated-4.0”在其模块列表中有一个错误模块“ManagedPipelineHandler”,
则CMD中执行:C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
可执行文件一栏输入“python程序”和“wfastcgi.py”的位置,位置请记下来,此处“MARK-A”,,注意别忘了中间的“|”符号,名称随意填写,但是请记下来,此处“MARK-B”
填完后点开请求限制,把“仅当请求映射至以下内容时才调用处理程序勾掉”
确认添加后会弹出创建FastCGI应用程序对话框,点击确认创建
这样在处理程序映射里就能看到刚添加的FastCGI映射了
然后在项目根目录下会发现多了一个web.config
打开文件
把里面的内容替换成如下代码:
<configuration>
<system.webServer>
<handlers>
<add name="MARK-B" path="*" verb="*" modules="FastCgiModule" scriptProcessor="MARK-A" resourceType="Unspecified" />
<add name="Python FastCGI" path="*" verb="*" modules="FastCgiModule" scriptProcessor=" MARK-A " resourceType="Unspecified" requireAccess="Script" />
</handlers>
</system.webServer>
<appSettings>
<add key="WSGI_HANDLER" value="django.core.handlers.wsgi.WSGIHandler()" />
<add key="PYTHONPATH" value="C:\pj_python\fbtest01" />
<add key="DJANGO_SETTINGS_MODULE" value="项目中setting所在的app的名称.settings" />
</appSettings>
</configuration>
scriptProcessor的值,要改为前文说过的MARK-A。PYTHONPATH的value要改为项目中manager.py文件的所在目录,也就是你项目的根目录。DJANGO_SETTINGS_MODULE的value中的要改为你的项目中settings文件所在的APP名称。
然后重启一下你的网站,域名没有错的话,应该就可以访问了,当然这时候静态链接还不行,图片、css还不对。
如果出了Bad Request - Invalid Hostname 400错误,则是防火墙没设置好入站规则
很多人在配置好IIS服务器之后,打开自己的网站返回的确是Bad Request错误。导致这一错误的主要原因是域名已经解析,但是无法找到域名对应的主机。
在设置网站标识时,通常将服务器IP设置为“全部未分配”(如下图所示),这时即可保证解析到服务器绑定的任何IP都可以访问到WEB服务。这合适在多网卡服务器时配置,一般都是一个IP,或者即使是多网卡,也需要指定到确切的IP,方便管理和后期维护。
主机名推荐设置为空,如果主机名设置格式错误同意易导致访问不到想要的网站。
此外,防火墙也很容易拦截外部设备访问我们服务器的请求,因此推荐在发布网站前,将自己的windows防火墙关闭。防火墙的入口也可以从控制面板中找到。
如果觉得关闭防火墙太过不安全,可以使用下面这种方法:在防火墙中选中高级设置;
选中左侧入站规则,然后点击右侧的新建规则按钮;
在新建规则界面中,选择创建端口类型的规则,并点击下一步;
接下来可以选择特定的端口号,选择的端口号一般都要大于80,80号端口为浏览器默认的访问端口。
接下来选择连接符合条件时的操作,选择允许连接;
应用规则按照下图勾选,一般这些都是电脑默认的选项;
最后填写一下名称和描述即可完成入站规则。
创建该入站规则的作用是让防火墙有选择地过滤掉来自外部的访问,并同时让我们本地的网站能够被访问到。但是入站规则起作用的前提是防火墙得处于开启状态,如果防火墙没开,服务器也没安装其他防护软件,通常不会出现因为拦截而访问不了站点的问题。
如果出了HTTP500.0错误,,fastcgi异常退出,,则到IIS的总控制台
双击点开Fastcgi设置
找到本项目所添加的cgi路径,双击点进去
找到环境变量—集合,右侧小方框,点进去
手动添加三个变量
WSGI_HANDLER
PYTHONPATH
DJANGO_SETTINGS_MODULE
值就在web.config里面。。添加进去,,然后在应用程序池回收一下,,然后网站重启就行了。