django
安装
poetry add django
检测
python -m django --version
or
>>> import django
>>> django.get_version()
'5.1.2'
创建项目
mkdir <project_name>
django-admin startproject <site_name> <project_name>
创建app
cd <project_name>
django-admin startapp <app_name>
# or
python manage.py startapp <app_name>
启动server
cd <project_name>
python manage.py runserver
# 以某个setting 启动
python manage.py runserver --setting t02.settings
创建管理员
cd <project_name>
python manage.py migrate
python manage.py createsuperuser
# 重启程序
python manage.py runserver
数据库表生成 models
cd <project_name>
python manage.py inspectdb
app创建数据库迁移
cd <project_name>
python manage.py makemigrations <app_name>
python manage.py migrate
app撤销数据库操作
cd <project_name>
# 撤销某一步的操作
python manage.py migrate <app_name> 0002_initial
# 撤销所有操作
python manage.py migrate <app_name> zero
# or
# python manage.py migrate --fake-initial <app_name>
测试用例
详见 https://docs.djangoproject.com/zh-hans/5.1/topics/testing/overview/#the-test-database
cd <project_name>
python manage.py test <app_name>.tests.StatisticsBaseTestCase.<func_name>
- 不创建测试数据库,复用当前数据库
setting 配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
},
'db1': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db1.sqlite3',
"TEST": {
"NAME": "db1",
"MIGRATE": False
}
}
}
普通测试
class MyTestCase(TransactionTestCase):
databases = {'default', 'db5'}
def test_get(self):
Emp.objects.using('db5').all()
测试
python manage.py test <app_name>.tests.<test_case>.<func_name> --keepdb
测试时显示sql
setup配置
def setUp(self):
# # # 启用 SQL 日志
logger = logging.getLogger("django.db.backends")
logger.setLevel(logging.DEBUG)
handler = logging.StreamHandler()
# handler.setFormatter(logging.Formatter('%(levelname)s:%(name)s: %(message)s')) # 如果需要自定义
logger.addHandler(handler)
测试
# 不清楚为什么settings.Debug=True 不起作用,必须这么加才会显示 sql
./manage.py test <app_name>.tests.<test_case>.<func_name> --keepdb --debug-mode
# or
./manage.py test <app_name>.tests.<test_case>.<func_name> --keepdb -d