前几天新血来潮写了个python爬虫从hdu上面爬取用户信息,然后把模块结合django做成了一个小网站,然而非常不幸的是,django在IIS下部署的步骤真的是太繁琐了。关于部署在IIS上的博客要么过时要么不全,这里结合我部署成功的例子来谈谈Django部署在IIS下的一些心得。

        首先,我们先准备好我们的项目包,就叫“DjangoProject”吧,这里我先给他打包,等下好传到服务器上(这里注意,我们生成了requirements.txt,方便待会到服务器生成同样的环境依赖,不知道怎么生成的可以在工作环境中执行“pip freeze > requirements.txt”即可生成)。

blob.png

        好,现在开始放到服务器的wwwroot目录下,然后新建网站,网站名称为test,选好物理路径,填好主机名(就是域名,这个要设置域名解析到服务器,了解IIS的人应该都知道我就不多说什么了,我们这里假设它为“django.woodcoding.com”,方便下文使用)。点击确定,启动网站。

blob.png

        这样就完成了网站的第一步,但是注意,我们是使用FastCgi模块部署的,我们待会需要用到一个模块——“wfastcgi”。这个环境依赖还没有安装,我们这里先安装一下,由于这里我已经安装了就会提示环境已经安装。

blob.png

        重要的一步来了,进入python的Lib/site-packages目录,这时你会找到一个名为wfastcgi.py的文件,把它复制到你django项目的根目录。

blob.png

        之后转到IIS控制台,找到“处理程序映射”,点击:

blob.png

        然后添加模块映射,如图,注意“|”号,前面是python的路径,后面是项目根目录的“wfascgi.py的路径”。网上说记得点开请求限制,保证钩钩没有被选中,反正我是点开了无数次都是默认未勾选的,不过以防万一还是点开看看吧。

blob.pngblob.png

 








        这时,打开项目根目录,会看到系统为我们生成了一个“web.config”文件。打开它,复制并修改下面这段代码中的红色部分到文件中(红色部分修改为你Django项目的工程名字,就是“django-admin startproject  xxxx”里面的那个xxxx)。       

<appSettings>

    <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()" />

    <add key="PYTHONPATH" value="%ROOTDIR%" />

    <add key="DJANGO_SETTINGS_MODULE" value="DjangoProject.settings" />

</appSettings>

如下图:

blob.png

        保存,这时我们打开“django.woodcoding.com”,发现django已经开始工作了。但是好像只有远程调用的css样式生效了,本地的css文件并没有什么卵用,所以,我们还需要为静态文件设立一个虚拟目录(其实我一开始也打算为每个静态文件设立虚拟目录的,但是后来由于特殊原因还是使用了django的“collectstatic”这样比较方便,所以下面有一段废话,如果不想看也不要直接跳到下面,因为这里有几个操作下面不会再讲)。

        添加虚拟目录,路径为django app的static的目录,然后找到这个目录的“处理模块映射”,删除我们刚刚添加的“djangoweb”映射。

blob.png

blob.png






        这时再刷新网站,哈哈,前台正常工作:

blob.png

        但是我们打开后台:

blob.png

        一脸懵逼,什么鬼?django admin的包我怎么设置虚拟目录?没办法,还是使用django的“collectstatic”功能吧。首先,在项目根目录建立static文件夹,然后打开项目文件夹里面的“settings.py”,设置静态文件根目录路径,如图。

blob.png

然后在项目目录下命令行执行:

“python manage.py collectstatic”

这时包括前台后台的静态文件全部都复制到了static目录下,所以上面那个单独为app的static目录设置虚拟目录是完全没必要了。

然后把当前static目录设置为虚拟目录就行(如果开始设置了app的虚拟目录,删除即可)。最后,别忘了删除虚拟目录的模块映射(注意,是虚拟目录的模块映射,别错了删了主目录的)。


        这时,后台登录样式也有了,理论上应该正常工作,但是我们似乎登录不进去?

blob.png

        why?因为我们使用了python自带的sqlite数据库(mysql、mssql数据库等不用管接下来的事了),这个数据库由于windows的权限问题是不能读写的。所以我们要赋予它IIS-USERS的完全控制权限。这里最好把数据库丢到一个文件夹里面去,然后修改settings.py的数据库目录。修改权限方法如下:

        找到数据库目录,然后右键点击属性,切换到安全选项卡,找到IIS_IUSRS用户,编辑,给予完全控制选项,确定,这样就可以正常登录后台了,不过看起来总觉得有点风险,既然django对各大数据库支持都那么好了,服务器又装了,还是用服务器数据库比较安全吧。

blob.pngblob.png



温馨提示:(注意发布网站的时候别忘了在settings.py里面关闭DEBUG选项,再设置ALLOW_HOST为你自己的域名哦!)