数据的使用、表关系的创建、Django框架的请求生命周期流程图

news/2024/5/19 1:38:53 标签: django, 流程图, python

目录

一、数据的增删改查

1. 用户列表的展示

2. 修改数据的逻辑分析

3. 删除功能的分析

二、如何创建表关系

三、Django的请求生命周期流程图


一、数据的增删改查

1. 用户列表的展示

把数据表中得用户数据都给查询出来展示在页面上

查询数据

python">def userlist(request):
    """展示用户数据"""
    # 1、 先查询数据表
    """这里不之处负数切片"""
    # user_list=models.UserInfo.objects.all()[0:2] # 查询所有的数据
    # user_list=models.UserInfo.objects.first() # 查询所有的数据
    # select *from userinfo where username ='kevin';
    # filter:类比where的使用
    # 只要返回的结果是queryset对象,那么就可以一直点方法下去
    # user_list=models.UserInfo.objects.filter(username='kevin').first() # 查询所有的数据
    user_list=models.UserInfo.objects.all() # 查询所有的数据
    # queryset对象就是一个列表套对象的形式
    # <QuerySet [<UserInfo: UserInfo object>, <UserInfo: UserInfo object>, <UserInfo: UserInfo object>]>
    # print(user_list[0])
    # print(user_list[0].username)
    # print(user_list[0].password)
    # print(user_list[0].gender)
    # print(user_list[1].gender)
    '''支持for循环'''
    # for i in user_list:
    #     print(i.gender)
    return render(request, 'userlist.html', locals())


def edit(request):
    """先接收id值"""
    edit_id = request.GET.get('id')
    """根据这个id值,再次去表中查询当前这条数据"""
    # <QuerySet [<UserInfo: kevin>]>
    edit_obj=models.UserInfo.objects.filter(id=edit_id).first()
    if request.method == 'POST':
        hidden_id = request.POST.get('hidden_id')
        username = request.POST.get('username')
        password = request.POST.get('password')
        gender = request.POST.get('gender')

2. 修改数据的逻辑分析

  1. 先确定修改哪条记录------>怎么样确定修改哪条记录?
  2. 通过什么字段可以确定唯一一条记录? 主键id,要携带主键id到后端.
  3. 在后端接收主键id值,然后根据这个id值再去表中查询数据,查询一条
  4. 然后把查询的数据在渲染到页面中,然后在修改
  5. 把修改之后的表单提交到后端,在做修改

数据的修改

python">    # 第一种方式的修改 
    affect_rows=models.UserInfo.objects.filter(pk=hidden_id).update(username=username,                 password=password, gender=gender)
    # print(affect_rows)

    # 第二种方式的修改
    edit_obj.username=username
    edit_obj.password=password
    edit_obj.gender=gender
    edit_obj.save() # 保存数据的
    # 跳转地址到列表展示也
    return redirect('/userlist/')
return render(request, 'edit.html', locals())

数据的添加

python">def delete(request):
    """1、还是要接收前端传过来的主键id值"""
    delete_id = request.GET.get('id')
    # delete from userinfo where id = 1;
    # models.UserInfo.objects.filter(pk=delete_id).delete()
    # user_obj = models.UserInfo.objects.filter(pk=delete_id).first()
    # user_obj.delete()
    return redirect('/userlist/')

def add(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        gender = request.POST.get('gender')

        """操作数据量添加数据"""
        # 返回的是当前记录的对象
        # user_obj=models.UserInfo.objects.create(username=username, password=password, gender=gender)
        # print(user_obj) # pyy
        # print(user_obj.gender)
        # print(user_obj.pk)

        """第二种方式添加"""
        user_obj = models.UserInfo(username=username,password=password,gender=gender)
        user_obj.save()
        return redirect('/userlist/')
    return render(request, 'add.html')

3. 删除功能的分析

  • 给删除按钮加一个链接,携带当前记录的id值
  • 后端要接收这个主键id值
  • 后端直接执行删除操作

数据的删除

二、如何创建表关系

  • 一对一 
  • 一对多 
  • 多对多
  • 没有关系

以图书管理系统为例

  • 图书表
  • 出版社表
  • 作者表
  • 作者详情表

换位思考判断表关系

  • 图书表和出版社表        >>>      一对多      >>>   图书表是多,出版社是一    >>> 建在多的一方
  • 图书表和作者表            >>>      多对多     >>>   需要第三张表
  • 作者表和作者详情表    >>>       一对一     >>>  外键字段一般建在查询频率较高的

在Django中如何创建表关系

python">class Book(models.Model):
    title = models.CharField(max_length=64)
    """
    max_digits=None,:总位数
    decimal_places=None:小数位数
    """
    # price decimal(8,2)
    price = models.DecimalField(max_digits=8, decimal_places=2)
    # publish_id = models.ForeignKey(to='Publish', to_field='id')
    """对于外键字段关系,会自动帮我们拼接_id"""
    publish = models.ForeignKey(to='Publish')
    """authors它是一个虚拟字段,它不会实际在表中创建出来这个字段,
    这一句可以自动帮助我们创建出来第三张表"""
    authors = models.ManyToManyField(to='Author')
python">"""出版社表"""
class Publish(models.Model):
    name = models.CharField(max_length=64)
    addr = models.CharField(max_length=64)
python">"""作者表"""
class Author(models.Model):
    name = models.CharField(max_length=64)
    author_detail = models.OneToOneField(to='AuthorDetail')
python">"""作者详情表"""
class AuthorDetail(models.Model):
    phone = models.CharField(max_length=64)
    email = models.CharField(max_length=64)

三、Django的请求生命周期流程图


http://www.niftyadmin.cn/n/5168945.html

相关文章

适用于4D毫米波雷达的目标矩形框聚类

目录 一、前言 二、点云聚类分割 三、基于方位搜索L型拟合 四、评价准则之面积最小化 五、评价准则之贴合最大化 六、评价准则之方差最小化 一、前言 对于多线束雷达可以获取目标物体更全面的面貌&#xff0c;在道路中前向或角雷达可能无法获取目标车矩形框但可以扫到两边…

Android修行手册 - POI操作Excel常用样式(字体,背景,颜色,Style)

点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&…

更安全的ssh协议与Gui图形化界面使用

目录 前言&#xff1a; 一.Gui图形化界面的使用 二.ssh协议 SSH的主要作用包括&#xff1a; 相比其他网络协议&#xff0c;SSH的优势包括&#xff1a; 三.idea集成Git 前言&#xff1a; 上一篇讲解了git的命令用法以及https协议&#xff0c;但是这个协议放在做团队项目的…

多级缓存之缓存同步

缓存数据同步的常见方式有三种&#xff1a; 设置有效期&#xff1a;给缓存设置有效期&#xff0c;到期后自动删除。再次查询时更新 优势&#xff1a;简单、方便缺点&#xff1a;时效性差&#xff0c;缓存过期之前可能不一致场景&#xff1a;更新频率较低&#xff0c;时效性要…

【GIT】Git中的Gui介绍,使用Git中的ssh协议介绍,使用使用idea集成Git

目录 一&#xff0c;Git中的Gui介绍&#xff0c;使用 二&#xff0c;Git中的ssh介绍&#xff0c;使用 三&#xff0c;使用idea集成Git 一&#xff0c;Git中的Gui介绍&#xff0c;使用 1.1什么是Gui&#xff1f; 图形化管理工具是一种通过可视化界面来操作计算机系统或应用程…

使用github copilot

现在的大模型的应用太广了&#xff0c;作为程序员我们当然野可以借助大模型来帮我们敲代码。 下面是自己注册使用github copilot的过程。 一、注册github copilot 1. 需要拥有github账号 &#xff0c;登录github之后&#xff0c;点右侧自己的头像位置&#xff0c;下面会出现…

深度学习之pytorch第一课

学习使用pytorch&#xff0c;然后进行简单的线性模型的训练与保存 学习代码如下&#xff1a; import numpy as np import torch import torch.nn as nn x_value [i for i in range(11)] x_train np.array(x_value,dtypenp.float32) print(x_train.shape) x_train x_train.r…

node插件MongoDB(四)—— 库mongoose 操作文档使用(新增、删除、更新、查看文档)(二)

文章目录 前言&#xff08;1&#xff09;问题&#xff1a;安装的mongoose 库版本不应该过高导致的问题&#xff08;2&#xff09;重新安装低版本 一、插入文档1. 代码2. node终端效果3. 使用mongo.exe查询数据库的内容 二、删除文档1. 删除一条2. 批量删除3. 代码 三、修改文档…