1、数据库操作创建数据
from django.db import connection
在debug调试时,加入connection.queries
def get(self, request, pk): # 一。创建数据 # 1、创建一条项目数据 # 方法1 直接使用模型类来创建模型对象 # one_project = Project(name='XXX项目', leader='xx人', desc='描述') # one_project.save() # 方法二 Project.objects.create(name='YYY',leader='yy',desc='这是YYY项目') # 方法一的整合 return HttpResponse('')
class Project(BaseModel): # 一个数据库模型类中只允许定义一个设置了primary_key=True的字段 # CREATE TABLE "project_people" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, # "name" varchar(20) NOT NULL, "age" integer NOT NULL) # id为主键约束 要想使得其他字段为为主键约束,id就不会成主键 # num = models.IntegerField(primary_key=True) # CharField指定varchar类型,必须设置max-length参数,指定最大长度 # verbose_name和help_text指定的中文描述,在admin后台站点以及接口文档平台中会使用 # unique=True设置唯一约束,默认为False name = models.CharField(verbose_name='项目名称', help_text='项目名称1', max_length=20, unique=True) leader = models.CharField(verbose_name='项目名称', help_text='项目名称1', max_length=10) # default=True指定当前字段的默认值 is_execute = models.BooleanField(verbose_name='项目是否开展', help_text='项目名称1', default=True) # null指定当前字段是否允许保存为空 # blank指定前端创建数据时是否允许不输入 desc = models.TextField(verbose_name='项目描述', help_text='项目描述', null=True, blank=True) # DateTimeField指定时间的类型 # auto_now_add=True在创建一条数据时,会自动将当前时间赋值给creatr_time,只会修改一次 # auto_now=True,每次更新数据时,会自动将当前时间赋值给update_time,只要修改,就会自动保存 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间', help_text='创建时间') update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间', help_text='更新时间') class Meta: db_table = 'tb_project' verbose_name = '项目表' verbose_name_plural = '项目表' managed = True
from django.db import models # Create your models here. # 表于表之间的关联关系 # Project与Interfaces表,一对多关系 # 学生表与学生详细信息表,一对一关系 # 学生表和课程表,多对多关系 # 一条项目数据:ID为1的测试开发平台项目 # 多年条接口数据:ID为1的登陆接口,ID为2的注册接口,ID为3的生成用例接口。 class Interfaces(models.Model): # id = models.AutoField(primary_key=True, verbose_name='id主键', help_text='id主键') name = models.CharField(verbose_name="接口名称", help_text='接口名称', max_length=20, unique=True) tester = models.CharField(verbose_name="测试人员", help_text='测试人员', max_length=20) # 1、可以使用ForeignKey在从表中指定外键字段,在一对多关系中"多"的那侧添加外键字段 # 2、ForeignKey第一个参数,需要指定关联父表,往往使用"子应用名.父表模型类名"1 # 3、必须指定on_delete级联删除策略 # 4、级联删除策略有如下种类 # CASCADE:当父表数据删除后,从表数据会自动删除 # SET_NULL: 当父表数据删除后,从表数据字段自动设置null # PROTECT: 当父表数据删除后,从表数据会抛出异常 # SET_DEFAULT:当父表数据删除后,从表数据外键字段会自动设置为default参数指定值 # project = models.ForeignKey('project.Project', on_delete=models.PROTECT) # project = models.ForeignKey('project.Project', on_delete=models.SET_NULL) # 创建数据表时,会自动添加project_id为字段名称,用于存放父表的外键值 # ForeignKey一对多 OneToOneFiled一对一 ManyToMany多对多 # desc = models.TextField(verbose_name='项目描述', help_text='项目描述', null=True, # blank=True) project = models.ForeignKey('project.Project', on_delete=models.CASCADE) # CASCADE()不能带括号,当函数用 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间', help_text='创建时间') update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间', help_text='更新时间') class Meta: db_table = 'tb_interfaces' verbose_name = '接口表' verbose_name_plural = '接口表' # def __str__(self): # return self.name
from django.http import HttpResponse from django.shortcuts import render from django.views import View from .models import Project from interfaces.models import Interfaces # Create your views here. from django.views import View from django.db import connection # 为了调试的时候查看sql语句 def index(request, pk): return HttpResponse(f'这是pk为{pk}的参数') def index2(request): return HttpResponse('结束') class ProjectViews(View): """ 定义类是图 1、必须继承View父类,或者子类 2、不同的请求方式,定义不同的请求方式 3、请求方式与请求定义一一对应 """ def get(self, request, pk): """ 1、第一个参数为ProjectViews对象 :param request: :param pk: :return: 1、query string 查询字符串参数: ?name='xiao'&age=12 可以使用request.GET进行获取,request.GET是QueryDict类型,可以类比python中的字典类型 可以使用request.GET['参数名']或者request.GET.get('参数名') 可以获取多个相同key值查询字符串参数 request.GET.getlist('参数名')获取所有参数 用request.GET['参数名']或者request.GET.get('参数名')获取最后一个参数 """ # 一。创建数据 # 1、创建一条项目数据 # 方法1 直接使用模型类来创建模型对象 # one_project = Project(name='XXX项目', leader='xx人', desc='描述') # one_project.save() # 方法二 # one_project = Project.objects.create(name='Y111', leader='yy', desc='这是YYY项目') # 方法一的整合 # 添加子表数据 # one_interfaces = Interfaces.objects.create(name='登陆把', tester='yy', desc='登陆', project_id=one_project.id) # 同下一行 # one_interfaces = Interfaces.objects.create(name='登1', tester='yy', project=one_project) # 子应用名称.objects.create # 二、更新数据 # 方法一: # 所有的模型类都有一个objects属性,是一个manage对象 # 获取所需修改模型类对象,重些相应的字段 # 必须执行save()方法。进行保存,查看debug中的sql语句,查看数据库 即已更新 # one_project = Project.objects.get(name='Y111') # one_project.name = '更改名称' # one_project.save() # 方法二: # 先将待修改的数据提取出来。然后用update方法,无需调用save()方法。 # qs = Project.objects.filter(name='更改名称').update(leader='zha zha') # 三 、读取数据 # 方式一: # 1、查询多条数据 # 使用模型类object.all() 返回QuerySet对象类似列表,但不是列表 # 惰性查找:只有需要用到数据时(len,取值,for),才会执行sql语句 # project_ps = Project.objects.all() # for project in project_ps: # print(project.name) # 读取一条数据 # con_pro = Project.objects.get(id=1) # 只能查一条或者为空,查的结果超过一条,会报错。要避免错误,最好用ID # 方式二: # one_pro = Project.objects.filter(id=1) # 返回QuerySet对象 不会报错,有就有数据,没有展示为空 return HttpResponse('') def post(self, request, pk): return HttpResponse(f'POST请求:PK为{pk}') def put(self, request, pk): return HttpResponse(f'PUT请求:PK为{pk}')