1、命令
python manage.py startapp 子应用名称
python manage.py runserver 8001 指定端口号
# nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。
nohup Command [ Arg … ] [ & ]
# 参数说明:
# Command:要执行的命令。
# Arg:一些参数,可以指定输出文件。
# &:让命令在后台执行,终端退出后命令仍旧执行。
nohup python manage.py runserver 0.0.0.0:8000 & 后台运行
nohup python manage.py runserver 0.0.0.0:8000 > /dev/log 2> /dev/log & 将日志输出到/dev/log
lsof -i:8000 查看该端口进程号
kill -9 PID 上一步的pid号
使用配置时可以导入from django.conf import settings,如:settings.DATABASES
python manage.py createsuperuser 创建超级管理员
python manage.py makemigrations # 生成迁移文件
python manage.py migrate # 同步到数据库中
python manage.py migrate --database=database1 #同步指定数据库
python manage.py migrate --database=database2
python manage.py createsuperuser
Ctrl + C 退出后关闭端口
Ctrl + Z 退出后不关闭端口
2、小的点
# 如模型类为Users
Users._meta.fields # 获取Users模型类所有的字段
Users.objects.none() # 创建一个空的queryset
Users.name # 获取单个字段
eval('Users.%s' % 'name') # 通过给定字符串获取字段,如获取name字段,有其他方式麻烦告诉我下呀,我这个有点不正宗
3、配置文件独立,分为3个文件,
1)公共配置base.py、开发配置dev.py、生产环境配置prod.py,
2)在dev.py和prod.py中导入公共配置,即加入from .base import *
3)开发时,可指定配置文件,python3 manage.py runserver 0.0.0.0:5001 --settings=django_search_proj.settings.dev
启动,
4)生产环境可以通过export DJANGO_SETTINGS_MODULE=“django_search_proj.settings.prod”
4、多个数据库指定app
DATABASES = {
'default': { # 默认的数据库,保存django一些默认的表如auth_user auth_user_groups auth_user_user_permissions 等
'ENGINE': 'django.db.backends.mysql', # 数据库引擎
'HOST': ' ', # 人员测试数据库主机
'PORT': 3306, # 数据库端口
'USER': '', # 数据库用户名
'PASSWORD': '', # 数据库用户密码
'NAME': '' # 数据库名字
},
'database1': {
'ENGINE': 'django.db.backends.mysql', # 数据库引擎
'HOST': '', # 人员测试数据库主机ip地址
'PORT': 3306, # 数据库端口
'USER': '', # 数据库用户名
'PASSWORD': '', # 数据库用户密码
'NAME': '' # 数据库名字
},
}
DATABASE_APPS_MAPPING = {
'appname': 'database1',
}
DATABASE_ROUTERS = ['django_search_proj.settings.database_apps_router.DatabaseAppsRouter'] # 指定路由文件路径
新建一个数据库路由文件
#!/usr/bin/env python
# coding:utf8
from django.conf import settings
DATABASE_MAPPING = settings.DATABASE_APPS_MAPPING # 在setting中定义的路由表
class DatabaseAppsRouter(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
def allow_migrate(self, db, app_label, model_name=None, **hints):
if db in DATABASE_MAPPING.values():
return DATABASE_MAPPING.get(app_label) == db
elif app_label in DATABASE_MAPPING:
return False
return None