測試開發進階(二十二)
- 2019 年 10 月 10 日
- 筆記
在 projects/models.py
中編寫
from django.db import models class Person(models.Model): """ 創建Person類 """ first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30)
- 每個應用下的數據庫模型類,需要在當前應用下的models.py文件中定義
- 一個數據庫模型類相當於一個數據表(Table)
- 一個數據庫模型類需要基礎Model或者其子類
- 定義的一個類屬性,就相當於數據庫表中的一個字段(
first_name
,last_name
) - 默認會創建一個自動遞增的id主鍵
- 默認創建的數據庫名為:應用名小寫_數據庫模型類小寫
修改數據庫遠程連接權限
GRANT ALL PRIVILEGES ON * . * TO '你的用戶名'@'%' IDENTIFIED BY '你的密碼';
我這邊使用
GRANT ALL PRIVILEGES ON * . * TO 'my_django'@'%' IDENTIFIED BY '123456';
刷新數據庫
flush privileges;


遷移

$ makemigrations projects $ migrate projects

遷移結果查看

字段
max_length
最大長度unique
設置當前參數唯一verbose_name
設置人性化的字段名help_text
用於API文檔中的中文名null
允許為空black
設置前端可以不傳遞default
設置默認值
class Projects(models.Model): """ 創建Projects模型類 """ name = models.CharField(verbose_name='項目名稱', max_length=200, unique=True, help_text='項目名稱') leader = models.CharField(verbose_name='負責人', max_length=50, help_text='負責人') tester = models.CharField(verbose_name='測試人員', max_length=50, help_text='測試人員') programer = models.CharField(verbose_name='開發人員', max_length=50, help_text='開發人員') publish_app = models.CharField(verbose_name='發佈應用', max_length=50, help_text='發佈應用') desc = models.TextField(verbose_name='簡要描述', help_text='簡要描述', blank=True, default='', null=True)
查看新表

查看錶設計

修改數據表名稱
在 Projects
類中添加
db_table
表名verbose_name
:在admin站點中人性化展示verbose_name_plural
:複數顯示(對照英文在單詞後面+s)
class Meta: db_table = 'tb_projects' verbose_name = '項目' verbose_name_plural = '項目'
再次遷移
$ makemigrations projects $ migrate projects
遷移前:

遷移後(點擊刷新):

後台站點
註冊站點
projects/admin.py
from django.contrib import admin from .models import Projects, Person admin.site.register(Projects) admin.site.register(Person)
全部遷移
$ makemigrations $ migrate


訪問admin
http://127.0.0.1:8000/admin

創建管理員賬戶
$ createsuperuser



讓圖中的 Persons
變為中文:修改 projects.models.Person
保存後刷新頁面
class Person(models.Model): """ 創建Person類 """ first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30) class Meta: verbose_name = '人' verbose_name_plural = '人們'

添加一個項目:

查看數據表


為了讓他顯示的更人性化在 projects.models.Projects
中添加:
def __str__(self): return self.name

修改展示的部分
fields
指定在修改「新增」中需要顯示的字段list_display
指定要列出的字段
from django.contrib import admin from .models import Projects, Person class ProjectsAdmin(admin.ModelAdmin): """ 定製後台管理站點類 """ fields = ('name', 'leader', 'tester', 'programer', 'publish_app', 'desc') list_display = ['id', 'name', 'leader', 'tester'] admin.site.register(Projects, ProjectsAdmin) admin.site.register(Person)

表關聯
創建一個應用

$ startapp interfaces
註冊子應用
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'projects.apps.ProjectsConfig', 'interfaces.apps.InterfacesConfig', ]
在 interfaces/models.py
中編寫
*一個項目中有多個接口 那麼需要在「多」的一側創建外鍵 *
項目表為父表「一」,接口表為「多」子表
class Interfaces(models.Model): name = models.CharField(verbose_name='項目名稱', max_length=200, unique=True, help_text='項目名稱') tester = models.CharField(verbose_name='測試人員', max_length=50, help_text='測試人員') desc = models.TextField(verbose_name='簡要描述', help_text='簡要描述', blank=True, default='', null=True) project = models.ForeignKey('projects.Projects', on_delete=models.CASCADE, verbose_name='所屬項目', help_text='所屬項目') class Meta(): verbose_name = 'a'
對於:
project = models.ForeignKey('projects.Projects', on_delete=models.CASCADE, verbose_name='所屬項目', help_text='所屬項目')
第一個參數
字符串
:關聯的模型路徑或者模型類「應用名.模型類」 -> 'projects.Projects'對象
:import導入from projects.models import Projects -> Projects
第二個參數
設置的是:當父表刪除之後,該字段的處理方式
models.CASCADE
:子表也會被刪除models.SET_NULL
:當前外鍵會被設置為Nonemodels.PROTECT
:會報錯models.SET_DEFAULT
:設置默認值,同時需要指定默認值,null=True
數據庫操作
使用Pycharm自帶的 PythonConsole
就可以進入Django的shell模式
使用 python manage.py shell
也可以進入

from projects.models import Projects Projects.objects.all() Out[3]: <QuerySet [<Projects: 測試遊記>, <Projects: 測試遊記1>]> Projects.objects.get(id=1) Out[4]: <Projects: 測試遊記> Projects.objects.get(id=1).name Out[5]: '測試遊記' Projects.objects.get(id=1).tester Out[6]: 'zx'
查看數據庫操作記錄
from django.db import connection print(connection.queries)
增
one_obj = Projects(name='「測試遊記」-創建', leader='zx_94', tester='zx', programer='zx', publish_app='公眾號', desc='666') one_obj.save()

數據庫操作記錄
print(connection.queries[-1]) {'sql': "INSERT INTO `tb_projects` (`name`, `leader`, `tester`, `programer`, `publish_app`, `desc`) VALUES ('「測試遊記」-創建', 'zx_94', 'zx', 'zx', '公眾號', '666')", 'time': '0.003'}