最新消息:欢迎光临 魔力 • Python!大家可以点开导航菜单中的【学习目录】,这个目录类似图书目录,更加方便学习!

Django2:Web项目开发入门笔记(15)

Django教程 小楼一夜听春语 21761浏览 0评论

这一篇教程,我们一起来了解如何将Django2的Web项目部署到基于IIS的Web服务器。

很多学习Python的用户,都是在使用Windows系统,当使用Django完成一个Web项目,想在本机进行测试,又不想额外安装Web服务器的话,可以考虑使用Windows自带的IIS进行部署。

IIS(Internet Information Services:互联网信息服务)是Web服务组件,其中包括Web服务器、FTP服务器、NNTP服务器和SMTP服务器,分别用于网页浏览、文件传输、新闻服务和邮件发送等方面。

如果想使用IIS部署Django项目,需要先在Window系统中添加IIS功能并开启CGI应用程序支持,大家可以参考之前发布的教程《练习项目11:在线编辑文件(上)》中的第一部分内容,进行添加与设置。

提示:教程中是以Windows7系统下的IIS7.5为例,不同版本的Windows或IIS的添加与设置都比较相近。

但是,仅有这些是不行的。

因为IIS支持FastCGI,不支持WSGI,而Django2全面使用WSGI,不再使用FastCGI。

MMP,这是有多大仇?

所以,要想让两个仇家能合作,需要有个中间人。

这个中间人是Python的第三方库wfastcgi。

了解了以上内容,我们就可以开始部署工作了。

提示:本篇教程以Window7为例。

一、安装启用wfastcgi

在系统目录中找到CMD命令行终端,路径为:C:\Windows\system32\cmd.exe

也可以在桌面左下角,点击开始按钮,在【搜索程序和文件】的输入框中输入CMD进行查找。

但是,不要急于打开,在程序图标上点击鼠标右键选择【以管理员身份运行】;否则,启用wfastcgi会失败。

执行命令:

pip install wfastcgi

wfastcgi-enable

启用成功后会显示:

已经在配置提交路径“MACHINE/WEBROOT/APPHOST”向“MACHINE/WEBROOT/APPHOST”的“sy
stem.webServer/fastCgi”节应用了配置更改”C:\Users\Administrator\AppData\Local\Programs\Python\Python36\python.exe|C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\site-packages\wfastcgi-3.0.0-py3.6.egg\wfastcgi.py” can now be used as a FastCGI script processor

注意上面的标红的路径,是由Python解释器的路径和“|”以及“wfastcgi.py”文件路径组成,后面会用得到。

如果需要部署多个项目,大家可以把“wfastcgi.py”文件从上面的路径中复制到Django项目的根目录下。

另外,如果想卸载wfastcgi,需要先禁用再卸载。

禁用命令:wfastcgi-disable

卸载命令:pip uninstall wfastcgi

二、创建网站

打开Internet信息服务(IIS)管理器,【控制面板】-【管理工具】-【Internet信息服务(IIS)管理器】。

在窗口左侧的【网站】图标上点击鼠标右键,选择【添加网站】。

站点名称可以和项目名称保持一致,然后物理路径选择项目目录,绑定设置使用默认设置,主机名留空。

三、添加处理程序映射

点中我们新建的网站。

注意:不要点中左侧列表的根目录,根目录中的处理程序映射是对所有网站有效的。

窗口中部找到【处理程序映射】,双击打开之后,在窗口右侧找到【添加模块映射】,点击打开后依次进行设置:

  • 请求路径:*
  • 模块:FastCgiModule
  • 可执行文件:Python解释器的路径|wfastcgi.py文件路径
  • 名称:MyFastCGI(自定义名称)

提示:可执行文件填写的内容就是之前标红的路径,如果将wfastcgi.py文件复制到了项目目录中的话,可以使用项目中的文件路径。

例如:C:\Users\Administrator\AppData\Local\Programs\Python\Python36\python.exe|D:\MyWeb\wfastcgi.py

另外,还要点击上图中的【请求限制】按钮,打开的窗口中取消【仅当请求映射至以下内容时才调用处理程序】的勾选。

提示:IIS7.5默认是不够选的,但是有些IIS版本会默认勾选,导致网站无法正常访问,例如:IIS10。

做完以上设置,点击【确定】,此时会弹出创建FastCGI应用程序的提示,点击【是】,完成创建。

四、添加应用程序

Internet信息服务(IIS)管理器左侧点中根目录,窗口中部找到【FastCGI设置】,双击进入。在打开的窗口中,双击我们创建的记录打开【编辑FastCGI应用程序】的窗口。

FastCGI属性列表中,找到【环境变量】,点击后方的【…】按钮进入【EnvironmentVariables集合编辑器】,左侧成员列表下方点击添加按钮,添加3个变量。


第1个变量是WSGI_HANDLER,以及它的实例。

在Django项目的“wsgi.py”文件中有一句代码:from django.core.wsgi import get_wsgi_application

导入的方法“get_wsgi_application”,它的返回值就是一个WSGIHandler()。

Name: WSGI_HANDLER

Value: django.core.wsgi.get_wsgi_application()

第2个变量是项目目录,Python代码文件的所在路径。

Name: PYTHONPATH

Value: D:\MyWeb

第3个变量是项目中“settings.py”文件的路径。

Name: DJANGO_SETTINGS_MODULE

Value: MyWeb.settings

点击确定按钮,保存退出。

网上的很多教程到这里就会说:当我们完成以上步骤,重新启动网站,就能够访问了。

事实上还不行,继续完成下面的设置。

五、修改项目的设置文件

打开项目中的“settings.py”文件,找到“ALLOWED_HOSTS ”,进行修改。

示例代码:

ALLOWED_HOSTS = ['*'] # *表示不限制,也可以在列表中添加站点绑定的域名

如果之前已经做过这项设置,此步骤可以略过。

六、添加目录权限

需要增加权限的目录包括Python安装目录项目目录,缺一不可。

修改内容是将这些目录都添加指定用户组的控制权限。

这里,我们给指定用户组都赋予“完全控制”的权限,参考《练习项目11:在线编辑文件(上)》中第二部分~第6点的内容。

提示:如果还不能访问,尝试将“IIS_IUSRS”用户组的权限也添加上。

到这里,就可以通过本机、局域网或者外网进行访问了。

打开浏览器,输入访问地址:

  • 本机:127.0.0.1或者localhost
  • 局域网:192.168.X.X
  • 外网:本机所在网络的外网IP地址

提示:如果本机通过路由器联网,需要路由器上做端口映射(转发),也可以通过启用DMZ来实现外网的访问。

问:如果局域网内可以访问,外网仍然无法访问,怎么办?

答:首先,找宽带服务商将IP地址转为公网IP,作者是电信宽带,打完热线要求更改后不到24小时就可以访问了。

问:如果转成公网IP依旧无法访问本机服务器,怎么办?

答:可能存在很多原因,有可能是防火墙问题,也有可能是IIS问题等等,需要进行排查才能确定。Django项目在IIS上部署,本来就是以测试为目的,我建议不要耗费太多精力在这个问题上,除非是真正在生产环境下需要如此进行部署。

最后,对于项目中的静态文件我们还需要进行相应的设置。
七、处理静态文件
1、打开项目中的“settings.py”文件,找到“STATIC_URL”,进行修改。

示例代码:

STATIC_URL = 'static/'  # 注意只有后面有“/”,否则会目录不正确。

2、打开项目中的“urls.py”文件,增加代码。

示例代码:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
                  ...省略URL分发配置...
              ] + static(settings.STATIC_URL, document_root=settings.STATIC_URL)

3、在项目文件夹中添加静态文件的文件夹。例如:static

4、Internet信息服务(IIS)管理器点中我们创建的网站,点击鼠标右键,选择添加虚拟目录,填写别名(例如:static),然后将这个虚拟目录指向静态文件目录的物理路径,点击确定保存。

到这里,我们就完成了Django2项目在IIS上的部署。

转载请注明:魔力Python » Django2:Web项目开发入门笔记(15)

头像
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网站 (可选)

网友最新评论 (14)

  1. 头像
    500错误,解决: 应用程序池>>设置应用程序池默认设置>>标识>>LocalSystem。
    acding6年前 (2018-04-02)回复
    • 小楼一夜听春语
      这个方法不是所有500错误都可以解决。
      小楼一夜听春语6年前 (2018-04-03)回复
  2. 头像
    能打开主页,但是为什么一点查询所有(之前的文具)就404了,admin也不能访问。求帮助
    走路爱走神6年前 (2018-06-07)回复
  3. 头像
    哈哈哈,出来了。再做了一遍。成功了。
    走路爱走神6年前 (2018-06-07)回复
  4. 头像
    但是Linux上的Apache部署Django还是没出来,┭┮﹏┭┮
    走路爱走神6年前 (2018-06-07)回复
    • 小楼一夜听春语
      一步不差的话,应该不会有问题。
      小楼一夜听春语6年前 (2018-06-07)回复
  5. 头像
    IIS 收到了请求;但在处理请求过程中出现内部错误。此错误的根本原因取决于处理该请求的是哪一个模块以及出现此错误时工作进程中出现了何种情况。 IIS 无法访问网站或应用程序的 web.config 文件。如果 NTFS 权限设置不正确,便会出现这种情况。 IIS 无法处理网站或应用程序的配置。 已经过身份验证的用户没有使用此 DLL 的权限。 该请求将被映射到托管处理程序,但不会安装 .NET 可扩展功能。
    ss6年前 (2018-07-06)回复
  6. 头像
    你好,网页打开显示的是这样。请问问题可能出在哪里了呢? Error occurred while reading WSGI handler: Traceback (most recent call last): File "C:\Python34\lib\site-packages\wfastcgi.py", line 791, in main env, handler = read_wsgi_handler(response.physical_path) File "C:\Python34\lib\site-packages\wfastcgi.py", line 633, in read_wsgi_handler handler = get_wsgi_handler(os.getenv("WSGI_HANDLER")) File "C:\Python34\lib\site-packages\wfastcgi.py", line 586, in get_wsgi_handler raise Exception('WSGI_HANDLER env var must be set') Exception: WSGI_HANDLER env var must be set StdOut: StdErr:
    土豆土豆6年前 (2018-10-02)回复
    • 头像
      我也是
      Four5年前 (2019-06-13)回复
      • 头像
        我也是 無解 有人有解嗎
        KK5年前 (2019-07-16)回复
        • 小楼一夜听春语
          这不是提示了“WSGI_HANDLER env var must be set”吗?没有设置WSGI_HANDLER环境变量。
          小楼一夜听春语5年前 (2019-07-18)回复
          • 头像
            你好请问提示这个,如何解决:提示的是这个~~ Error occurred while reading WSGI handler: Traceback (most recent call last): File "C:\Python34\lib\site-packages\wfastcgi.py", line 791, in main env, handler = read_wsgi_handler(response.physical_path) File "C:\Python34\lib\site-packages\wfastcgi.py", line 633, in read_wsgi_handler handler = get_wsgi_handler(os.getenv("WSGI_HANDLER")) File "C:\Python34\lib\site-packages\wfastcgi.py", line 603, in get_wsgi_handler handler = getattr(handler, name) AttributeError: 'module' object has no attribute 'wsgi' StdOut: StdErr:
            柑橘5年前 (2019-08-13)
  7. 头像
    提示的是这个~~ Error occurred while reading WSGI handler: Traceback (most recent call last): File "C:\Python34\lib\site-packages\wfastcgi.py", line 791, in main env, handler = read_wsgi_handler(response.physical_path) File "C:\Python34\lib\site-packages\wfastcgi.py", line 633, in read_wsgi_handler handler = get_wsgi_handler(os.getenv("WSGI_HANDLER")) File "C:\Python34\lib\site-packages\wfastcgi.py", line 603, in get_wsgi_handler handler = getattr(handler, name) AttributeError: 'module' object has no attribute 'wsgi' StdOut: StdErr:
    土豆土豆6年前 (2018-10-02)回复
    • 头像
      跟你同样的问题,请问解决了么?
      柑橘5年前 (2019-08-12)回复