ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Django-数据库操作(model与views)-1

2021-08-02 16:02:45  阅读:186  来源: 互联网

标签:Project name views models Django project model True verbose


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}')

标签:Project,name,views,models,Django,project,model,True,verbose
来源: https://blog.csdn.net/weixin_44919017/article/details/119146237

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有