Django学习日志03

数据的增删改查(insert  update delete select)

1. 用户列表的展示
    # 把数据表中得用户数据都给查询出来展示在页面上
    添加数据
    id            username        password         gender        age      action
                                                                修改  删除
        
2. 修改数据的逻辑分析
    # 1. 先确定修改哪条记录------>怎么样确定修改哪条记录?
    # 2. 通过什么字段可以确定唯一一条记录? 主键id,要携带主键id到后端.
    # 3. 在后端接收主键id值,然后根据这个id值再去表中查询数据,查询一条
    # 4. 然后把查询的数据在渲染到页面中,然后在修改
    # 5. 把修改之后的表单提交到后端,在做修改
    
3. 删除功能的分析
    # 1. 给删除按钮加一个链接,携带当前记录的id值
    # 2. 后端要接收这个主键id值
    # 3. 后端直接执行删除操作

用户列表展示

models.py

 核心数据

    def __str__(self):
        return self.username

 views.py

核心数据 

from app01 import models
def userlist(request):
    user_list = models.UserInfo.objects.all()   #查询所有数据
    return  render(request,'userlist.html',locals())

 

修改页面完成

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

views.py

def edit(request):
    #先接受id
    edit_id = request.GET.get(('id'))
    #根据id值去表中查询
    edit_obj = models.UserInfo.objects.filter(id=edit_id).first()

    return render(request,'edit.html',locals())

 edit.html

<body>
<div class="container">
    <div class="row">
        <h1 class="text-center">修改页面</h1 >
        <form action="">
            <div class="form-group">
                用户名:<input type="text" class="form-control" name="username" value="{{ edit_obj.username }}">
            </div>
            <div class="form-group">
                密码:<input type="password" class="form-control" name="password" value="{{ edit_obj.password }}">
            </div>
            <div class="form-group">
                性别:<input type="text" class="form-control" name="gender" value="{{ edit_obj.gender }}">
            </div>
            <div class="form-group">
                <input type="submit" class="btn btn-success btn-block" value="提交">
            </div>
        </form>
    </div>
</div>

 

修改功能完成

第一种方式的修改:

def edit(request):
    #先接受id
    edit_id = request.GET.get(('id'))
    #根据id值去表中查询
    edit_obj = models.UserInfo.objects.filter(id=edit_id).first()
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        gender = request.POST.get('gender')
        #需要一个参数验证,暂时pass
        #修改数据  update userinfo set username = '',password = '' where id =1
        affect_rows = models.UserInfo.objects.filter(id = edit_id).update(username=username,password=password,gender=gender)
        print(affect_rows)
        return redirect('/userlist/')
    return render(request,'edit.html',locals())

 

 

 第二种方法:

删除功能

3. 删除功能的分析
    # 1. 给删除按钮加一个链接,携带当前记录的id值
    # 2. 后端要接收这个主键id值
    # 3. 后端直接执行删除操作

def delete(request):
    #先接受id值
    del_id = request.GET.get('id')
    models.UserInfo.objects.filter(pk = del_id).delete()
    return redirect('/userlist/')

 

添加用户功能

userlist.html增加一个按钮

 

def add(request):
    if request.method =="POST":
        username = request.POST.get('username')
        password = request.POST.get('password')
        gender = request.POST.get('gender')
        models.UserInfo.objects.create(username=username, password=password, gender=gender)
        return redirect('/userlist/')
    return render(request,'add.html')

 第二种方法

如何创建表关系(一对一  一对多  多对多)

"""图书表"""
class Book(models.Model):
    title = models.CharField(max_length=64)
    price = models.DecimalField(max_digits=8,decimal_places=2)
    publish = models.ForeignKey(to = 'Publish',on_delete=models.CASCADE) #默认和P表主键建立关系,如果不是主键建立关系需要自定义to_field = ''
    authors  = models.ManyToManyField(to='Author')#manytomany会自动创建虚拟表


"出版社表"
class Publish(models.Model):
    name = models.CharField(max_length=64)
    addr = models.CharField(max_length=64)



"作者表"
class Author(models.Model):
    name = models.CharField(max_length=64)
    author_detail = models.OneToOneField(to='AuthorDetail',on_delete=models.CASCADE)


'作者详情表'
class AuthorDetail(models.Model):
    phone = models.CharField(max_length=64)
    email = models.CharField(max_length=64)

makemigrations

migrate 

Django的请求生命周期流程图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/162898.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Web与DNS综合实验

目录 题目&#xff1a; 步骤一&#xff1a;准备工作 步骤二&#xff1a;在server端搭建简单网页 步骤三&#xff1a;node1端的DNS解析配置 步骤五&#xff1a;node2端进行测试。 题目&#xff1a; 1.打开3个主机&#xff0c;server、node1、node2 2.server为web主机建立网…

如何将 Docsify 项目部署到 CentOS 系统的 Nginx 中?

文章目录 1. 介绍2. 准备工作3. 将 Docsify 项目上传至服务器4. 在服务器上安装 Node.js5. 在服务器上运行 Docsify6. 配置 Nginx 反向代理7. 访问 Docsify 文档8. 拓展8.1 配置 HTTPS8.2 定制 Docsify 主题8.3 鉴权和访问控制 &#x1f389;如何将 Docsify 项目部署到 CentOS …

​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​

软考-高级-系统架构设计师教程&#xff08;清华第2版&#xff09;【第20章 系统架构设计师论文写作要点&#xff08;P717~728&#xff09;-思维导图】 课本里章节里所有蓝色字体的思维导图

图片标注工具Labelme的安装及使用方法

参考&#xff1a;图像语义分割标注工具labelme制作自己的数据集用于mask-rcnn训练_ZealCV的博客-CSDN博客_语义分割标注工具 在做目标检测任务时&#xff0c;需要用到labelImg进行画框标注&#xff0c;在之前的文章中已经介绍过该工具的使用方法。然而如果是做语义分割的任务时…

Linux命令之查看文件和权限修改操作

目录 查看文件 1. cat --- 将文件中的内容打印在输出设备 2. more --- 分页显示文件内容 3.less ---查看文件内容 4. head -- 查看文件前n行内容 5.tail -- 查看指定文件的后n行内容或实时监测文件 6. wc -- 可计算文件的字节数、字数和列数 文件搜索 1.which --- 获取…

大数据可视化是什么?

大数据可视化是将海量数据通过视觉方式呈现出来&#xff0c;以便于人们理解和分析数据的过程。它可以帮人们发现数据之间的关系、趋势和模式&#xff0c;并制定更明智的决策。大数据可视化通常通过图形、图表、地图和仪表盘等视觉元素来呈现数据。这些元素具有直观、易理解的特…

Prompt 编程的设计技巧

大家好&#xff0c;我是木川 《Prompt 编程》即利用 GPT 模型的能力实现编程效果&#xff0c;《Prompt 编程》最早是由菠菜老师提出&#xff0c;本文基于 《Prompt 编程》的概念及自己的一些感想&#xff0c;总结了下《 Prompt 编程》的设计技巧 一、结构化 针对复杂的 Prompt&…

sqli-labs(2)

7. 输入?id1 --显示格式错误 ?id1" --正常 测试 ?id1“ and sleep(5) -- 发现并没有成功 ?id1) --显示格式错误继续尝试 ?id1)) -- 显示正常 测试 ?id1“ and sleep(5) -- 发现sleep执行 对于语句闭合的尝试主要从 " ()来测试 报错语句尝试发现不回显报错信息…

Solidity基础语法代码2

// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /* 哈希算法具有两个特性&#xff1a; 1. 输入值相同&#xff0c;输出值一定相同 2. 不管输入值有多大&#xff0c;输出值是定长的&#xff0c;并且哈希算法是不可逆向运算的 通常把哈希算法用在签名运算&#xff0…

在网页中添加水印的实现方法

在网页设计中&#xff0c;为了保护内容的版权以及增加一些特殊效果&#xff0c;经常需要在页面上添加水印。本文将介绍一种通过Canvas和JavaScript实现在网页上添加水印的方法。 功能&#xff1a; 允许自定义水印内容、字体颜色可以防止用户删除水印元素、修改样式等其他手段…

基于原子搜索算法优化概率神经网络PNN的分类预测 - 附代码

基于原子搜索算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于原子搜索算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于原子搜索优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神…

windows安装Git【超详细图解】

目录 git安装地址 git配置 提交代码时使用的命令 git安装地址 Git for WindowsWe bring the awesome Git VCS to Windowshttps://gitforwindows.org/ 打开终端&#xff0c;输入git --version git配置 git config --global user.name "用户名" git config --g…

镀膜与干刻中的平均自由程是什么?

在芯片制造中&#xff0c;镀膜和干刻是其中的重要环节&#xff0c;通常要用到CVD&#xff0c;RIE等技术&#xff0c;对材料表面进行纳米级的精细操作。在这些工序中&#xff0c;原子&#xff0c;分子&#xff0c;离子等&#xff0c;会在气体或真空中进行自由运动&#xff0c;直…

基础模型的自然语言处理能力综述

NLP作为一个领域为基础模型开辟了道路。虽然这些模型在标准基准测试中占据主导地位&#xff0c;但这些模型目前获得的能力与那些将语言描述为人类交流和思维的复杂系统的能力之间存在明显的差距。针对这一点&#xff0c;我们强调语言变异的全部范围&#xff08;例如&#xff0c…

Yolov5安装运行过程中出现的问题

Yolov5安装运行过程中出现的问题合集 安装问题pip 安装 requirements.txtcmd下如何退出python&#xff1f;升级numpy protobuf版本过高AttributeError: Can’t get attribute ‘SPPF’ on <module ‘models.common’ from 地址找不到图片NameError: name warnings is not de…

想要精通算法和SQL的成长之路 - 摩尔投票法的运用

想要精通算法和SQL的成长之路 - 摩尔投票法的运用 前言一. 多数元素1.1 摩尔投票法 二. 多数元素II2.1 分析 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 多数元素 原题链接 1.1 摩尔投票法 简单来说&#xff0c;假设数组 num 的众数是 x&#xff0c;数组长度为n。 有…

基于Java+SpringBoot+Vue3+Uniapp+TypeScript(有视频教程)前后端分离健身预约系统设计与实现

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

UE5制作场景时的小技巧和注意事项

UE5制作场景时的小技巧和注意事项 一、场景相关 1.1灯光 1.1.1构建完光照,发现场景都是黑的 可能是所有灯光是静态灯光,把skylight改为动态,如果改完之后还是黑色的,那就在构建一次,就应该没问题了 1.1.2场景中有多个动态光会造成阴影闪烁 需要将skylight变为固定 1…

C语言之for while语句详解

C语言之for while语句详解 文章目录 C语言之for while语句详解简介1 while语句1.1while语句的格式1.2 while语句的实践 2 for2.1 for语句格式2.2 for循环的实践 3 do while3.1 do while语句格式3.2 do while循环的实践 3 循环中break和continue3.1 while语句中的break和continu…

STM32与ZigBee无线通信技术在工业自动化中的应用

工业自动化是指利用电子技术、计算机技术和通信技术等手段&#xff0c;对工厂、设备和生产过程进行自动化控制和管理的过程。在工业自动化中&#xff0c;可靠的无线通信技术对于实时数据的传输和设备的协同控制至关重要。本文将介绍STM32微控制器与ZigBee无线通信技术在工业自动…