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的修改
第一次寫,望大家批評指正