以下可保证可以本地测试
到http://www.apachelounge.com/安装完整版apache, 装载c盘
安装python
安装pip:curl获取安装脚本或直接下载安装脚本来安装pip, 然后把pip路径设置到path
安装mod_wsgi(先通过vs installer安装整个c++栏目以及2015 vc++ 14.0 然后重启):pip install mod_wsgi
安装django, pip install Django==3.0.4
创建项目: django-admin startproject dj1
创建app: py manage.py startapp app1
开始写代码, 本地测试是py manage.py runserver
(重要!)连接mssql
- 安装这个包:
pip install django-mssql-backend - 服务器内安装odbc 13驱动(微软官网)
- 按照教程修改settings.py里的DATABASES,options默认即可(就是用odbc 13的驱动)
以下是正式环境配置
首先, 在项目目录下的setting.py, 改动这两行:
STATIC_URL = 'static/'
ALLOWED_HOSTS = ['sun-pc']
然后配置httpd.conf
pip install mod_wsgi, 安装好以后, 通过命令行获得3行配置
参考如下配置, 放入到apache的conf
# 装载mod st (版本号根据情况改)
LoadFile "c:/users/administrator/appdata/local/programs/python/python37/python37.dll"
LoadModule wsgi_module "c:/users/administrator/appdata/local/programs/python/python37/lib/site-packages/mod_wsgi/server/mod_wsgi.cp37-win_amd64.pyd"
WSGIPythonHome "c:/users/administrator/appdata/local/programs/python/python37"
# 装载mod ed
# 设置要运行Python的目录(与apache下其他正常目录隔开)
WSGIPythonPath D:/ingrid/dj1
# 设置上面这个目录访问时的别名, 以及wsgi配置文件的路径
WSGIScriptAlias /dj1 D:/ingrid/dj1/dj1/wsgi.py application-group=%{GLOBAL}
#设置静态文件路径(前半部分是django生成的路径, 而后半部分的实际文件夹的路径)
Alias /dj1/app1/static D:/ingrid/dj1/app1/static
说明
网上的文档, 配置的都是整个站点只运行python时的配置. 而我上面的配置, 是基于站点已经存在一个网站的情况下,
再单独设置某个文件夹运行python服务. 因此无需设置各种目录权限. 但是必须根据实际情况做修改, 比如要改项目下的settings
关于静态文件路径
静态文件位于app1/static,比如app1/static/app1/1.css,django官方推荐使用{% static 'app1/1.css' %}来生成路径
在开发模式下django自带的开发服务器会处理生成的路径, 让程序可以访问到静态文件
但是线上使用apache的话,生成的路径必须再加一个别名来实现访问,也就是上文配置文件最后一行
原理就是wsgi模块并不会像开发服务器那样“智能”:当你访问这个路径的时候,由于路径位于dj1下,因此被django接管,但是又不属于urls.py定义过的路径, 因此无法访问
解决方案就是在配置文件内定义别名,强行让apache重新接管该路径,让该路径重新变为“正常”模式(访问路径和实体文件夹的路径一致)
