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,
在官网http://apr.apache.org/docs/apr/1.6/apr__perms__set_8h_source.html复制代码于其中,并放入相应文件夹:Apache24/include,再继续安装。
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的修改
第一次写,望大家批评指正