前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >测试开发进阶(二十二)

测试开发进阶(二十二)

作者头像
zx钟
发布2019-09-29 17:14:46
6130
发布2019-09-29 17:14:46
举报
文章被收录于专栏:测试游记测试游记

projects/models.py中编写

代码语言:javascript
复制
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. 默认创建的数据库名为:应用名小写_数据库模型类小写

修改数据库远程连接权限

代码语言:javascript
复制
GRANT ALL PRIVILEGES ON * . * TO '你的用户名'@'%' IDENTIFIED BY '你的密码';

我这边使用

代码语言:javascript
复制
GRANT ALL PRIVILEGES ON * . * TO 'my_django'@'%' IDENTIFIED BY '123456';

刷新数据库

代码语言:javascript
复制
flush privileges;

迁移

代码语言:javascript
复制
$ makemigrations projects
$ migrate projects

迁移结果查看

字段

  • max_length 最大长度
  • unique 设置当前参数唯一
  • verbose_name 设置人性化的字段名
  • help_text 用于API文档中的中文名
  • null 允许为空
  • black 设置前端可以不传递
  • default 设置默认值
代码语言:javascript
复制
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)
代码语言:javascript
复制
class Meta:
    db_table = 'tb_projects'
    verbose_name = '项目'
    verbose_name_plural = '项目'

再次迁移

代码语言:javascript
复制
$ makemigrations projects
$ migrate projects

迁移前:

迁移后(点击刷新):

后台站点

注册站点

projects/admin.py

代码语言:javascript
复制
from django.contrib import admin
from .models import Projects, Person

admin.site.register(Projects)
admin.site.register(Person)

全部迁移

代码语言:javascript
复制
$ makemigrations
$ migrate
访问admin

http://127.0.0.1:8000/admin

创建管理员账户
代码语言:javascript
复制
$ createsuperuser

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

代码语言:javascript
复制
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中添加:

代码语言:javascript
复制
def __str__(self):
    return self.name
修改展示的部分
  • fields 指定在修改「新增」中需要显示的字段
  • list_display 指定要列出的字段
代码语言:javascript
复制
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)

表关联

创建一个应用

代码语言:javascript
复制
$ startapp interfaces

注册子应用

代码语言:javascript
复制
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中编写

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

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

代码语言:javascript
复制
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'

对于:

代码语言:javascript
复制
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也可以进入

代码语言:javascript
复制
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'

查看数据库操作记录

代码语言:javascript
复制
from django.db import connection
print(connection.queries)

代码语言:javascript
复制
one_obj = Projects(name='「测试游记」-创建', leader='zx_94', tester='zx', programer='zx', publish_app='公众号', desc='666')

one_obj.save()

数据库操作记录

代码语言:javascript
复制
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'}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试游记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 修改数据库远程连接权限
  • 迁移
  • 字段
    • 查看新表
      • 查看表设计
      • 修改数据表名称
        • 迁移前:
          • 迁移后(点击刷新):
            • 后台站点
              • 访问admin
              • 创建管理员账户
              • 修改展示的部分
          • 表关联
            • 创建一个应用
              • 注册子应用
                • 第一个参数
                  • 第二个参数
                  • 数据库操作
                    • 查看数据库操作记录
                      相关产品与服务
                      数据库
                      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档