測試開發進階(二十二)

  • 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)
  1. 每個應用下的數據庫模型類,需要在當前應用下的models.py文件中定義
  2. 一個數據庫模型類相當於一個數據表(Table)
  3. 一個數據庫模型類需要基礎Model或者其子類
  4. 定義的一個類屬性,就相當於數據庫表中的一個字段( first_name, last_name)
  5. 默認會創建一個自動遞增的id主鍵
  6. 默認創建的數據庫名為:應用名小寫_數據庫模型類小寫

修改數據庫遠程連接權限

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='所屬項目')

第一個參數

  1. 字符串:關聯的模型路徑或者模型類「應用名.模型類」 -> 'projects.Projects'
  2. 對象:import導入from projects.models import Projects -> Projects

第二個參數

設置的是:當父表刪除之後,該字段的處理方式

  • models.CASCADE:子表也會被刪除
  • models.SET_NULL:當前外鍵會被設置為None
  • models.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'}