django 1.9.7 备忘

来源:互联网 发布:php默认编码方式 编辑:程序博客网 时间:2024/06/04 18:04

1. 使用Mysql

settings.py

DATABASES = {    'default': {},    'database1': {        'ENGINE': 'django.db.backends.mysql',        'NAME': 'database_name_1',        'USER': 'username_1',        'PASSWORD': 'password_1',        'HOST': 'host_1',        'PORT': 'port_1',    },    'database2': {        'ENGINE': 'django.db.backends.mysql',        'NAME': 'database_name_2',        'USER': 'username_2',        'PASSWORD': 'password_2',        'HOST': 'host_2',        'PORT': 'port_2',    },}

2. 多数据库联用

settings.py

DATABASE_APPS_MAPPING = {    'app_name': 'database_name',}DATABASE_ROUTERS = [    'project_name.database_router.DatabaseRouter',]

database_router.py

from django.conf import settingsDATABASE_MAPPING = settings.DATABASE_APPS_MAPPINGclass DatabaseRouter(object):    def db_for_read(self, model, **hints):        if model._meta.app_label in DATABASE_MAPPING:            return DATABASE_MAPPING[model._meta.app_label]        return None    def db_for_write(self, model, **hints):        if model._meta.app_label in DATABASE_MAPPING:            return DATABASE_MAPPING[model._meta.app_label]        return None    def allow_relation(self, obj1, obj2, **hints):        db_obj1 = DATABASE_MAPPING.get(obj1._meta.app_label)        db_obj2 = DATABASE_MAPPING.get(obj2._meta.app_label)        if db_obj1 and db_obj2:            if db_obj1 == db_obj2:                return True            else:                return False        return None    def allow_syncdb(self, db, model):        if db in DATABASE_MAPPING.values():            return DATABASE_MAPPING.get(model._meta.app_label) == db        elif model._meta.app_label in DATABASE_MAPPING:            return False        return None

3. 部署(nginx)

3.1 安装nginx, supervisor, uwsgi

ubuntu

sudo apt-get install python-dev nginxsudo pip install supervisorsudo pip install uwsgi

3.2 测试uwsgi

uwsgi --http :8001 --chdir /path/to/project --home=/path/to/env --module project.wsgi

–home 指定虚拟环境,如果没有可以省略. 这时在浏览器输入localhost:8001/app_name应该可以看到相应app的首页内容.

3.3 用supervisor管理uwsgi

导出supervisor的默认配置文件

sudo echo_supervisord_conf > /etc/supervisord.conf

uwsgi.ini

[uwsgi]socket = /tmp/django.sockchdir=django_project_dirwsgi-file = django_project_name/wsgi.pytouch-reload=django_project_dir/reloadprocesses = 2threads = 4chmod-socket = 664chown-socket=tu:www-data

在supervisord.conf末尾添加

[program:django_project_name]command=/path/to/uwsgi --ini uwsgi_dir/uwsgi.inidirectory=django_project_dirstartsecs=0

启动supervisor

sudo supervisord -c /etc/supervisord.conf

启动(重启,关闭)supervisor管理的程序

sudo supervisorctl -c /etc/supervisord.conf start(restart, stop) django_project_name

3.4 配置nginx

sudo vim /etc/nginx/sites-available/django_project_name.conf

server {    listen      8001;    server_name www.django_project_name.com;    charset     utf-8;    client_max_body_size 75M;    location /media  {        alias /path/to/project/media;    }    location /static {        alias /path/to/project/static;    }    location / {        uwsgi_pass  unix:///tmp/django_project_name.sock;        include     /etc/nginx/uwsgi_params;    }}

激活网站

sudo ln -s /etc/nginx/sites-available/zqxt.conf /etc/nginx/sites-enabled/django_project_name.conf

测试配置语法问题

sudo service nginx configtest

重启 nginx 服务器

sudo service nginx reloadorsudo service nginx restart

这时如果配置都正确的话就可以在浏览器里输入localhost:8001/app_name来访问相应app首页.
可以在/etc/hosts文件里加入

127.0.0.1 www.django_project_name.com

这样就可以用 www.django_project_name.com:8001/app_name 的形式来访问了

参考
自强学堂 django部署(nginx)

0 0
原创粉丝点击