创建工程
Django安装完成后,bin目录下会生成django-admin.py文件,调用如下命令创建工程
django-adminstartproject mysite #会在当前目录创建
新建APP
工程创建之后,调用如下命令创建应用,注意venv的使用
python manage.pystartapp comic
配置wsgi
修改/etc/httpd/conf.d/中的配置文件,调用此wsgi,若使用venv需要同时设置python-path
<VirtualHost *:8081>
ServerName compute01
ServerAlias 192.168.1.52
<Directory /var/myproject>
Require all granted
</Directory>
WSGIScriptAlias / /var/myproject/mysite/mysite/wsgi.py
WSGIDaemonProcess mysitepython-path=/var/myproject
使用venv时,wsgi调用wsgi.py时,sys.path中未包含venv中的包。所以要在wsgi.py中指定django及mysite的sys.path
import os
import sys
#sys.path中指定django.core.wsgi的位置
sys.path.append('/var/myproject/python/lib/python2.7/site-packages')
#sys.path中指定mysite.settings的位置
sys.path.append('/var/myproject/mysite')
os.environ.setdefault("DJANGO_SETTINGS_MODULE","mysite.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
重启httpd,成功使用wsgi调用django应用
这里需要注意的是,如果部署两个以上不同的django project在不同端口时,使用os.environ.setdefault("DJANGO_SETTINGS_MODULE","startlearner.settings")设置环境不可行,因为后面的project会覆盖前一个project的环境变量。此时需要在每个wsgi中直接指定环境变量
mysite/wsgi.py
os.environ["DJANGO_SETTINGS_MODULE"]= "mysite.settings"
imp/wsgi.py
os.environ["DJANGO_SETTINGS_MODULE"]= "imp.settings"
这样就可以同时启动两个使用不同环境变量的project了
ALLOW_HOST
注意配置settings.py中的ALLOWED_HOSTS设置访问权限,ALLOW_HOST = ["*"] #所有远程地址均可访问
DATABASE
配置MySQL数据库
创建数据库、用户
# mysql -uroot
- >create database mysite CHARACTER SET utf8;
- >create user mysite;
- >grant all privileges on mysite.* to 'mysite'@'%'identified by '123456' with grant option;
- >flush privileges;
注意:新安装数据库后,新建用户mysite本地登录时,可能会报1045错误,远程登陆则无此问题,原因是mysql的localhost匿名登录机制导致的。在user表中添加一条重复mysite记录,但其host字段为localhost可解决此问题,删除user表中User字段为空的数据(删除匿名用户)也可解决此问题。详见http://www.cnblogs.com/zhao1949/p/6117698.html
Django后台可使用多种数据库,默认SQLites
配置Django使用mysql数据库,修改settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': "mysite",
'USER': "mysite",
'PASSWORD': "123456",
'HOST': "127.0.0.1",
'PORT': "…",
'default-character-set': 'utf8',
'OPTIONS': {
'init_command': 'SET storage_engine=INNODB',
#注意:mysql内部存在不同引擎,此参数需要设置,参考https://docs.djangoproject.com/en/1.11/ref/databases/
}
}
}