1. 程式人生 > >win10環境下配置django2.0.4+Apache2.4+python3.6專案,以及Django靜態檔案、Apache多專案配置的解決方案(親測)

win10環境下配置django2.0.4+Apache2.4+python3.6專案,以及Django靜態檔案、Apache多專案配置的解決方案(親測)

1 安裝django, Apache,python

要求Apache和python位數一致,比如我的Apache2.4-x86和 python3.6-32位

我的安裝位置:

Apache2.4 ---  E:\Apache24

python3.6---E:\phthon

django2.0.4 ---E:\python\Lib\site-packages\django(我是用pycharm安裝的)

2 配置環境變數(為wsgi的安裝做準備):

MOD_WSGI_APACHE_ROOTDIR指向Apache根目錄,即E:\Apache24

 

3 pip install mod_wsgi

安裝wsgi會需要visual studio的編譯器,我安裝是的是vs2017

(如果Apache和python位數不一致會報錯,我之前位數不一致,報的是100多個無法解析的外部符號),另外可能還會報錯:

找不到Apache24/include/apr_perms_set.h檔案,不要慌

新建apr_perms_set.h,

4 安裝完wsgi後,根據python安裝目錄進入E:\python\Scripts

用命令列執行箭頭所指的mod_wsgi-express.exe:

mod_wsgi-expressmodule-config

得到3行後續配置所需的程式碼:

LoadFile "e:/python/python36.dll"

LoadModulewsgi_module "e:/python/lib/site-packages/mod_wsgi/server/mod_wsgi.cp36-win32.pyd"

WSGIPythonHome "e:/python"

5 Apache的配置

5.1 開啟Apache24/conf/httpd.conf:大概在240多行作如下修改:

就是將前面得到的3行程式碼複製進去,

5.2 因為我是啟用了虛擬主機的(最後面也會講不啟用的情況),所以去掉Include conf/extra/httpd-vhosts.conf前面#:

然後來到Apache24/conf/extra/httpd-vhosts.conf,

比如我有兩個專案JX,JL分別在

E:/aaProject/PythonProject/JX和E:/aaProject/PythonProject/JL資料夾

各自的靜態檔案在其根目錄下的static檔案下。即:

E:/aaProject/PythonProject/JX/static和E:/aaProject/PythonProject/JL/static

作如下修改:

<VirtualHost*:80>

        ServerName www.jx.com 

       #專案wsgi.py檔案

       WSGIScriptAlias / E:/aaProject/PythonProject/JX/JX/wsgi.py

       <DirectoryE:/aaProject/PythonProject/JX/>   

        <Files wsgi.py>   

         Require all granted   

        </Files>   

       </Directory>  

#靜態檔案
    Alias /static/ E:/aaProject/PythonProject/JX/static/
    <Directory E:/aaProject/PythonProject/JX/static/> 
        Options FollowSymlinks
        AllowOverride none
        Require all granted
    </Directory>

       #專案根目錄

       DocumentRoot"E:/aaProject/PythonProject/JX" 

       <Directory"E:/aaProject/PythonProject/JX/"> 

              Options IndexesFollowSymLinks 

              AllowOverride None 

              Require all granted 

       </Directory> 

</VirtualHost>

<VirtualHost*:80>

       ServerName www.jl.com 

       #專案wsgi.py檔案

       WSGIScriptAlias / E:/aaProject/PythonProject/JL/ JL /wsgi.py

       <Directory E:/aaProject/PythonProject/JL />   

        <Files wsgi.py>   

         Require all granted   

        </Files>   

       </Directory>    

#靜態檔案
    Alias /static/ E:/aaProject/PythonProject/JL/static/
    <Directory E:/aaProject/PythonProject/JL/static/> 
        Options FollowSymlinks
        AllowOverride none
        Require all granted
    </Directory>

       #專案根目錄

       DocumentRoot"E:/aaProject/PythonProject/ JL " 

       <Directory"E:/aaProject/PythonProject/ JL /"> 

              Options IndexesFollowSymLinks 

              AllowOverride None 

              Require all granted 

       </Directory> 

</VirtualHost>

這時重啟Apache然後訪問網站的話會報錯(伺服器內部的錯誤,6.2解決)

6靜態檔案的配置

6.1 每個專案的settings.py新增:

(1)'django.contrib.staticfiles',

(2)接著再新增

這裡的話,tools 和jianjia是我專案裡面的兩個不同應用,所以將兩個應用的靜態目錄(在應用根目錄下建立static資料夾,即:應用名稱/static)都加入到 STATICFILES_DIRS中,

其中BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__))),也就是專案的根目錄

(3)在專案的根目錄新增static資料夾,然後執行 python manage.py collectstatic 就可以將各應用的靜態資料夾收集到專案根目錄下的static資料夾

(4)靜態檔案的使用:比如有 專案根目錄/應用根目錄/static/a.jpg,引用時:{{STATIC_URL}} "a.jpg" 就行了

6.2每個專案的wsgi.py新增:

sys.path.append('E:/aaProject/PythonProject/JX/'),注意是各自專案的根目錄

 

重啟Apache,

www.jx.com就是E:/aaProject/PythonProject/JX專案

www.jl.com 就是E:/aaProject/PythonProject/JL專案

不啟用虛擬主機的話:

Apache配置跟前面差不多,以E:/aaProject/PythonProject/JX專案為例,只需要在httpd.conf中再新增:

最後別忘了專案中wsgi.py和settings.py的修改

第一次寫,望大家批評指正