Django+Windows+IIS,避坑实录

        打算将Django项目部署在服务器上(Windows环境),前面试图使用Apache,结果无论怎么试都不行(从查阅的资料猜测应该是跟python版本和VC版本有关),所以才有了这篇文章。

        不管外面对IIS的评价怎么样,但对我这么一个新手来说,部署起来真是相当简单友好。

        部署的过程大概就是三部分:安装相应版本Python,打包上传项目,开启IIS,设置网站。这个过程非常简单,我将步骤整理如下。

       本文结构:

                 一、安装对应版本Python;

                二、打包上传项目;

                三、开启IIS;

                四、设置网站;

                五:常见问题解决方法

一、安装对应版本Python

        1、查看自己Windows是多少位系统操作。可以通过我的电脑--右键--属性进行查看。我的是64位。

        2、去官网下载对应版本Python。我下载的是Python3.9.6(64位)

         3、建一个文件夹来存放Python(这一步可选,即使不建也没关系)。我建的是一个名为python的文件夹,路径是‘C:\python’

        4、安装Python。这里要注意两点,一个是把添加系统变量给勾选上,而是选择location。

 勾选

选择自己的location 

         5、检查是否安装成功。方法是打开cmd,输入python并回车,如果安装成功如下图所示

 二、打包上传项目(你的项目在本地测试应该是成功)

        1、上传前先获取项目依赖包。方法,在本地项目路径下使用pip freeze > requirements.txt命令获取项目的requirements.txt文件(它自动生成在项目路径里,不要动它),里面存的都是项目所依赖的包。

        2、上传项目。方法:将已经生成过requirements.txt文件的项目文件夹复制粘贴到服务器的里。具体粘贴到哪里有你自己确定。我这里是粘贴到了C盘。

        3、安装项目依赖包。方法:在你粘贴的项目文件夹里打开cmd,执行pip install -r requirements.txt命令。执行完如下图:

如果使用的是Mysql数据库,请自行安装Mysql和导入数据,我这里用的是Django自带的sqlite3,文件直接在项目文件夹里,不用安装和导入数据库数据了。 

三、开启IIS

        1、安装IIS。从Windows里搜索到iis,然后点击它

 之后会出现以下页面,根据页面进行点击即可。我的已经安装好了,下面这几张图是从网上搜到的,过程基本一致。

         请注意,在这一步之后,版本的不同,有的会出现让选择配置 ,不用管,一致下一步,最后会出现下面这个页面:

点击结束即可。

        2、安装CGI。方法是再次选择添加角色和功能,找到之前安装的WEB服务器IIS,点击它,就会如下图所示:

然后在展开的选项里找到Web服务器,点击它,找到应用程序开发点击在展开的列表里找到CGI,勾选,然后下一步,安装它 ,如下图:

最后结束的画面如下图:

        关闭即可。此时就可测试一下iis服务器是否开启成功。测试方法是在浏览器输入http://127.0.0.1,然后回车,如果页面如下图,即是开启成功 :

 四、设置网站(这个是重头戏,非常关键)

        1、在IIS里添加网站(也就是你的项目),如下图,可依次照着设置。

这时项目就出现在网站列表里,如下图:

至此,我们服务器上有了项目,也有了网站。因为在Windows下,我们没法使用uwsgi,所以我们还需要一个桥梁把它们连接起来——wfastcgi。

        2、下载wfastcgi。方法是在打开CMD窗口里,输入命令pip install wfastcgi,如下图

        3、启动wfastcgi。方法是使用命令wfastcgi-enable ,如下图

 

特别注意:箭头指到的方框里的内容要复制下来,后面要用,它说的是python和 wfastcgi的位置。

        4、设置配置文件web.config(目的是让网站能够找到加载项目)

这个web.config文件应该放在项目的根目录里,也就是跟manage.py平级。配置文件内容如下,请按照实际进行修改:

代码如下:

<?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <handlers>
                <add name="Python FastCGI"
                     path="*"
                     verb="*"
                     modules="FastCgiModule"
                    scriptProcessor="c:\python\python38\python.exe|c:\python\python38\lib\site-packages\wfastcgi.py"#此处需要修改
                     resourceType="Unspecified"
                     requireAccess="Script"/>
            </handlers>
        </system.webServer>
        <appSettings>
            <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()" />
            <add key="PYTHONPATH" value="c:\script" />#此处需要修改
            <add key="DJANGO_SETTINGS_MODULE" value="script.settings" />#此处需要修改
        </appSettings>
    </configuration>

 到这里就可以看到你通过“公网IP:8000”,在浏览器看到你的网页。这里有个注意事项,就是你的把debug设置为False,ALLOWED_HOSTS设置为你的公网IP,才能显示网站。

五:常见问题解决方法

说说几种错误出现时的处理方法:

一、网站静态文件(样式什么的)加载不出来

解决办法:

        1、添加虚拟目录,在IIS找选中网站项目名,右键--添加虚拟路径

6.jpg

7.jpg

添加虚拟目录时,别名放与你settings里设置的一致,比如'static',物理路径就是静态资源的实际目录。

        2、在static里新建一个web.config文件,然后写入下面的内容:

<?xml version="1.0" encoding="UTF-8"?>
    <configuration>
      <system.webServer>
      <!-- this configuration overrides the FastCGI handler to let IIS serve the static files -->
      <handlers>
        <clear/>
   <add name="StaticFile" path="*" verb="*" modules="StaticFileModule" resourceType="File" requireAccess="Read" />
     </handlers>
   </system.webServer>
</configuration>

重启IIS,访问网站,前端就能正常显示。

 二、网站media文件(视频图片什么的)加载不出来

         方法:跟第一种问题的解决方法一模一样,唯一的区别是把web.config文件里的第七行中的name="StaticFile"换成name="MediaFile",其他内容不变,然后把这个web.config文件放到media文件夹中。

三、用户无法登录,出现500错误。

        错误的原因是数据库文件没有权限(所谓的777权限),所以只需要给它权限即可。如下图:

四、

(下面这几种错误我并没出现过,但是其他人出现了,所以我把它们也收集到这里,供大家参考):

如果访问IIS出现如下错误

4.jpg

HTTP 错误 500.19 Internal Server Error

出现这样的情况是因为IIS7之后的版本都采用了更安全的 web.config 管理机制,默认情况下会锁住配置项不允许更改。我们把它解锁了就OK。

打开CMD,在里面依次输入下面两个命令:

1

2

3

%windir%\system32\inetsrv\appcmd unlock config -section:system.webServer/handlers

%windir%\system32\inetsrv\appcmd unlock config -section:system.webServer/modules

5.jpg

解除了锁定之后,再访问网站就能正常显示了。

还有种情况:有时候访问页面,或者单独访问网站后台出现400错误,这个时候可能是因为没有给网站权限的原因。我们打开IIS,找到网站,右键,编辑权限,给IIS用户添加修改和写入权限。就能正常访问。

1.png

管理后台样式丢失解决

正常情况下,部署的时候管理后台样式是不能正常显示的,我们需要收集这些样式到项目里去,才能正常显示。

步骤:

1、在settings.py里添加STATIC_ROOT配置指定收集路径如:

#指定样式收集目录,路径一般为项目里的static文件夹
STATIC_ROOT  = os.path.join(BASE_DIR, 'static')
#或(这里根据自己的实际路径去改)
STATIC_ROOT = 'C:\python\mysite\static'

然后CMD下运行如下面命令,进行样式采集:

python manage.py collectstatic

采集完成之后,刷新页面。后台样式成功显示

 如果感觉对你有帮助,就点赞收藏吧!

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值