1、数据库操作创建数据
1.1在view.py中get方法下,创建数据
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('')
1.2数据库父表中创建字段
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
1.3数据库表中创建表,关联父表
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
1.4通过views.py,进行数据库操作
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}')