测试开发进阶(二十二)

大憨熊 提交于 2020-12-19 00:12:58
来呀~

欢迎关注我的公众号「测试游记」

projects/models.py中编写

  
    
  
  
  1. from django.db import models

  2. class Person(models.Model):

  3. """

  4. 创建Person类

  5. """

  6. first_name = models.CharField(max_length=30)

  7. last_name = models.CharField(max_length=30)

  1. 每个应用下的数据库模型类,需要在当前应用下的models.py文件中定义

  2. 一个数据库模型类相当于一个数据表(Table)

  3. 一个数据库模型类需要基础Model或者其子类

  4. 定义的一个类属性,就相当于数据库表中的一个字段( first_namelast_name)

  5. 默认会创建一个自动递增的id主键

  6. 默认创建的数据库名为:应用名小写_数据库模型类小写

修改数据库远程连接权限

  
    
  
  
  1. GRANT ALL PRIVILEGES ON * . * TO '你的用户名'@'%' IDENTIFIED BY '你的密码';

我这边使用

  
    
  
  
  1. GRANT ALL PRIVILEGES ON * . * TO 'my_django'@'%' IDENTIFIED BY '123456';

刷新数据库

  
    
  
  
  1. flush privileges;

迁移

  
    
  
  
  1. $ makemigrations projects

  2. $ migrate projects

迁移结果查看

字段

  • max_length 最大长度

  • unique 设置当前参数唯一

  • verbose_name 设置人性化的字段名

  • help_text 用于API文档中的中文名

  • null 允许为空

  • black 设置前端可以不传递

  • default 设置默认值

  
    
  
  
  1. class Projects(models.Model):

  2. """

  3. 创建Projects模型类

  4. """

  5. name = models.CharField(verbose_name='项目名称', max_length=200, unique=True, help_text='项目名称')

  6. leader = models.CharField(verbose_name='负责人', max_length=50, help_text='负责人')

  7. tester = models.CharField(verbose_name='测试人员', max_length=50, help_text='测试人员')

  8. programer = models.CharField(verbose_name='开发人员', max_length=50, help_text='开发人员')

  9. publish_app = models.CharField(verbose_name='发布应用', max_length=50, help_text='发布应用')

  10. desc = models.TextField(verbose_name='简要描述', help_text='简要描述', blank=True, default='', null=True)

查看新表

查看表设计

修改数据表名称

Projects类中添加

  • db_table表名

  • verbose_name:在admin站点中人性化展示

  • verbose_name_plural:复数显示(对照英文在单词后面+s)

  
    
  
  
  1. class Meta:

  2. db_table = 'tb_projects'

  3. verbose_name = '项目'

  4. verbose_name_plural = '项目'

再次迁移

  
    
  
  
  1. $ makemigrations projects

  2. $ migrate projects

迁移前:

迁移后(点击刷新):

后台站点

注册站点

projects/admin.py

  
    
  
  
  1. from django.contrib import admin

  2. from .models import Projects, Person

  3. admin.site.register(Projects)

  4. admin.site.register(Person)

全部迁移

  
    
  
  
  1. $ makemigrations

  2. $ migrate

访问admin

http://127.0.0.1:8000/admin

创建管理员账户

  
    
  
  
  1. $ createsuperuser

让图中的 Persons变为中文:修改 projects.models.Person保存后刷新页面

  
    
  
  
  1. class Person(models.Model):

  2. """

  3. 创建Person类

  4. """

  5. first_name = models.CharField(max_length=30)

  6. last_name = models.CharField(max_length=30)

  7. class Meta:

  8. verbose_name = '人'

  9. verbose_name_plural = '人们'

添加一个项目:

查看数据表

为了让他显示的更人性化在 projects.models.Projects中添加:

  
    
  
  
  1. def __str__(self):

  2. return self.name

修改展示的部分

  • fields 指定在修改「新增」中需要显示的字段

  • list_display 指定要列出的字段

  
    
  
  
  1. from django.contrib import admin

  2. from .models import Projects, Person

  3. class ProjectsAdmin(admin.ModelAdmin):

  4. """

  5. 定制后台管理站点类

  6. """

  7. fields = ('name', 'leader', 'tester', 'programer', 'publish_app', 'desc')

  8. list_display = ['id', 'name', 'leader', 'tester']

  9. admin.site.register(Projects, ProjectsAdmin)

  10. admin.site.register(Person)

表关联

创建一个应用

  
    
  
  
  1. $ startapp interfaces

注册子应用

  
    
  
  
  1. INSTALLED_APPS = [

  2. 'django.contrib.admin',

  3. 'django.contrib.auth',

  4. 'django.contrib.contenttypes',

  5. 'django.contrib.sessions',

  6. 'django.contrib.messages',

  7. 'django.contrib.staticfiles',

  8. 'projects.apps.ProjectsConfig',

  9. 'interfaces.apps.InterfacesConfig',

  10. ]

interfaces/models.py中编写

*一个项目中有多个接口 那么需要在「多」的一侧创建外键 *

项目表为父表「一」,接口表为「多」子表

  
    
  
  
  1. class Interfaces(models.Model):

  2. name = models.CharField(verbose_name='项目名称', max_length=200, unique=True, help_text='项目名称')

  3. tester = models.CharField(verbose_name='测试人员', max_length=50, help_text='测试人员')

  4. desc = models.TextField(verbose_name='简要描述', help_text='简要描述', blank=True, default='', null=True)

  5. project = models.ForeignKey('projects.Projects', on_delete=models.CASCADE, verbose_name='所属项目', help_text='所属项目')

  6. class Meta():

  7. verbose_name = 'a'

对于:

  
    
  
  
  1. 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也可以进入

  
    
  
  
  1. from projects.models import Projects

  2. Projects.objects.all()

  3. Out[3]: <QuerySet [<Projects: 测试游记>, <Projects: 测试游记1>]>

  4. Projects.objects.get(id=1)

  5. Out[4]: <Projects: 测试游记>

  6. Projects.objects.get(id=1).name

  7. Out[5]: '测试游记'

  8. Projects.objects.get(id=1).tester

  9. Out[6]: 'zx'

查看数据库操作记录

  
    
  
  
  1. from django.db import connection

  2. print(connection.queries)

  
    
  
  
  1. one_obj = Projects(name='「测试游记」-创建', leader='zx_94', tester='zx', programer='zx', publish_app='公众号', desc='666')

  2. one_obj.save()

数据库操作记录

  
    
  
  
  1. print(connection.queries[-1])

  2. {'sql': "INSERT INTO `tb_projects` (`name`, `leader`, `tester`, `programer`, `publish_app`, `desc`) VALUES ('「测试游记」-创建', 'zx_94', 'zx', 'zx', '公众号', '666')", 'time': '0.003'}

本文分享自微信公众号 - 测试游记(zx94_11)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!