[Django] Window上通過IIS發布Django網站


網上的教程坑實在多,以下是本人親測通過的:

需要解決的問題:

1.使用 python manage.py runserver 來運行服務器,只適用測試環境中使用,正式發布的服務,需要一個可以穩定而持續的服務器。

2.部署在Windows服務器上

3. Django網站中的靜態文件CSS、Font、Image、js 在本地服務器使用runserver指令可以完美加載,部署到IIS上后CSS失效、靜態文件消失。

系統及軟件版本:

Win 7

IIS 7.5

python 3.7

Django 2.1.7

wFastCGI

1.可運行的django網站

我創建的工程叫HelloWorld,目錄如下

首先確保自己的django網站在服務器上可以通過命令行 runserver 正常運行。 

先在命令行切換到網站的根目錄 D:\Automation_Develop_Work\HelloWorld

然后執行python manage.py runserver 0.0.0.0:8000

由於我的電腦上同時安裝了python2和python3,而我搭建django環境用的是python3,所以需要用下面的這個命令:

py -3 manage.py runserver 0.0.0.0:8000

 

接下來就可以在瀏覽器中輸入http://127.0.0.1:8000/admin/

(我事先按照這個教程:http://www.runoob.com/django/django-admin-manage-tool.html 創建了Admin管理工具):

 

 2.IIS安裝和配置

安裝IIS : https://www.microsoft.com/zh-CN/download/details.aspx?id=1038

在控制面板的程序和功能中,打開啟用或關閉Windows功能窗口

勾選Internet Information Services下面所有的子目錄,需要一個個的勾選

3.python安裝wfastcgi模塊

用 pip install wfastcgi 進行安裝

由於我的電腦上同時安裝了python2和python3,而我搭建django環境用的是python3,所以需要用下面的這個命令:

pip3 install wfastcgi

我的電腦上已經安裝過了,沒有保存之前的截圖,下面的截圖顯示我已經安裝過了。

4.項目文件處理

4.1 將項目文件拷貝到 C:\inetpub\wwwroot 目錄下,方便管理,同時可以避免引起Windows Server的某些安全問題。 

4.2 在python的Lib\site-packages目錄下,找到wfastcgi.py文件,並將其復制到你的django項目根目錄下

我的機器是將 C:\Python37\Lib\site-packages\wfastcgi.py 拷貝到 C:\inetpub\wwwroot\HelloWorld\wfastcgi.py

5.配置網站

5.1 進入IIS管理器,添加網站

我的電腦-->右鍵-->管理-->Servies and Application-->Internet Information Services(IIS) Manager

 5.2 填寫相關參數

5.3 進入你建立的站點,選擇處理程序映射

請注意,必須進入你指定的網站里面,再添加模塊映射,否則,映射會添加到你所有的網站里。

 

5.4 添加模塊映射

 

模塊選擇FastCgiModule,如果第3步沒有安裝wfastcgi模塊,請先安裝哦。

可執行文件對於本項目來說,實際上是必填的。

此例中,C:\Python37\python.exe|C:\inetpub\wwwroot\HelloWorld\wfastcgi.py。前面是python的路徑,后面是wfastcgi.py文件的路徑。實際上,如果wfastcgi.py文件路徑直接引用python\Lib\site-packages目錄下的文件也可以,不過就不可以部署多個Django網站了。 

Name是可以自己隨便填的,但是這個在后面的web.config中要用到,所以記住你這里填的是什么。

5.5 填寫完參數后,選擇請求控制,設置如圖

5.6 確認添加后,程序映射添加成功 

 5.7 返回主頁,進入FastCGI設置

 

 5.8 新建FastCGI應用程序,修改環境變量

 點擊右側的Add Application:

按照下圖設置並點開Environment Variables右側的那個小圖標

 添加2個環境變量

     1.  get_wsgi_application()方法的位置

    Name: WSGI_HANDLER
    Value: django.core.wsgi.get_wsgi_application()

 

      2.   項目settings.py文件的位置

             Name: DJANGO_SETTINGS_MODULE

             Value: HelloWorld.settings(HelloWorld是自己的項目名稱)

6 在網站根目錄創建一個名為web.config的文件

此時文件目錄如下:

web.config的文件內容如下:(<appSettings></appSettings> ,我驗證了一下,這一截是可以不要的,因為在IIS里面已經設置過了,而且web.config文件是自動生成的)

 
        
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appSettings>
      <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()" />
      <add key="PYTHONPATH" value="%ROOTDIR%" />
      <add key="DJANGO_SETTINGS_MODULE" value="HelloWorld.settings" />
    </appSettings>
    <system.webServer>
        <handlers>
            <add name="MyFastCgiModule" path="*" verb="*" modules="FastCgiModule" scriptProcessor="C:\Python37\python.exe|C:\inetpub\wwwroot\HelloWorld\wfastcgi.py" resourceType="Unspecified" />
        </handlers>
    </system.webServer>
</configuration>

紅色標識的是需要照着配的,可能根據你自己的情況需要改一下。

DJANGO_SETTINGS_MODULE 的 value 里面 HelloWorld 是項目的名字

MyFastCgiModule 是在 IIS 配置時添加模塊映射的名字

C:\Python37\python.exe|C:\inetpub\wwwroot\HelloWorld\wfastcgi.py 前面一截是python的路徑,后面一截是項目中wfastcgi.py的路徑,中間用豎線隔開

至此,一個不包含靜態文件的Django站點部署完成

在別人的電腦上就可以通過你的IP地址訪問這個網站了,但是這時候靜態文件是丟失的狀態,看不到樣式這些,還繼續處理靜態文件的發布

6+.修改setting.py文件中的ALLOWED_HOSTS

通過瀏覽器訪問服務器網址,出現訪問錯誤,報錯為
Invalid HTTP_HOST header: ‘xxx.xx.xxx.xxx:8080’. You may need to add ‘xxx.xx’ to ALLOWED_HOSTS

解決辦法:
修改創建項目時生成的setting.py文件

將ALLOWED_HOSTS = []改為ALLOWED_HOSTS = ['*']

再次運行即可成功訪問。

7. 配置靜態文件

7.1 在C:\inetpub\wwwroot\HelloWorld\HelloWorld\settings.py中配置STATIC_ROOT如下: 

STATIC_ROOT = os.path.join(BASE_DIR, 'static')

注意:這里必須是 static ,必須和 C:\inetpub\wwwroot\HelloWorld\HelloWorld\settings.py 中 STATIC_URL = '/static/' 一致

7.2 收集靜態文件

命令行跳轉到項目目錄: cd /d C:\inetpub\wwwroot\HelloWorld

執行命令 : python manage.py collectstatic

由於我的電腦上同時安裝了python2和python3,而我搭建django環境用的是python3,所以需要用下面的這個命令:

py -3 manage.py collectstatic

此時會生成一個文件夾叫static

我是事先建了一個Admin管理工具,static下面會有一個admin的子文件

 admin文件夾下面有css,fonts,img,js

7.3 配置靜態文件

在項目的static文件夾中新建一個名為web.config的文件

web.config的內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <remove name="MyFastCgiModule" />
    </handlers>
  </system.webServer>
</configuration>

MyFastCgiModule 是在 IIS 配置時添加模塊映射的名字

7.4 打開IIS管理器,選定該網站項目,右擊選擇添加虛擬路徑

(剛驗證了一下,好像這一步不需要)

7.5 填寫虛擬路徑的別名和路徑

別名我填的是staticForHelloWorld

路徑則是該網站static文件夾的路徑,也就是剛才創建web.config的文件夾:C:\inetpub\wwwroot\HelloWorld\static

 重新運行一下IIS,應該就沒有問題了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM