Skip to content

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

Comments