首页 > 编程语言 >Python基础day55

Python基础day55

时间:2023-07-28 21:22:05浏览次数:42  
标签:Python max 基础 request 外键 id models user day55

通过结合前端页面实现ORM对数据的增删改查

写一个页面,把数据库中的数据以表格形式展示出来,然后在每一行的后面加上两个按钮,分别是修改、删除

思路:

  思考修改功能的逻辑:

  1. 确定修改哪条记录,怎么确定?通过主键id确定唯一一条记录

  2. 点击修改的按钮,需要跳转到一个修改的页面

  3. 应该通过id查询到原来的数据,并且把这个记录的数据展示到写稿的页面

  4. 开始修改,提交到后端的修改数据的方法中

# 需要自己写一个edit_user.html文件
def edit_user(request):
    id = request.GET.get('id')
    userinfo = models.UserInfo.objects.filter(id=id).first()
    if request.method == 'POST':
        '''写修改的逻辑'''
        hidden_id = request.POST.get('hidden_id')
        username = request.POST.get('username')
        password = request.POST.get('password')
        age = request.POST.get('age')
        gender = request.POST.get('gender')
        # 修改数据表中的数据
        models.UserInfo.objects.filter(id=hidden_id).update(username=username, password=password,age=age, gender=gender)
        # 第二种修改方式
        # userinfo.username = username
        # userinfo.password = password
        # userinfo.age = age
        # userinfo.gender = gender
        # userinfo.save()  # 保存数据的
        # return redirect('/userlist/')
    return render(request, 'edit_user.html', locals())

  思考删除功能的逻辑:

  1. 确定删除哪条记录,怎么确定?通过主键id确定唯一一条记录

  2. 点击删除的按钮,请求到后端的删除地址

  3. 后端拿到id直接做删除操作、跳转回列表页面

def del_user(request):
    # 在HTML文件中通过href="/edit_user/?id={{ user.id }}"来拿到id
    id = request.GET.get('id')
    models.UserInfo.objects.filter(id=id).delete()
    return redirect('/userlist/')

动静态网页

静态网页

  直接将写固定数据,一支部会变的

动态网页

  从后端取数据展示到页面

  数据是从数据库中查询出来的也是动态网页

def userlist(request):
    # 从数据库中查询数据
    user_list = models.UserInfo.objects.all()  # 查询所有数据
    print(user_list)
    return render(request, 'userlist.html', locals())
# locals() 让内部的局部变量能够在html文件中也能使用

{% for user in user_list %}
                <tr>
                <td>{{ user.id }}</td>
                <td>{{ user.username }}</td>
                <td>{{ user.password }}</td>
                <td>{{ user.age }}</td>
                <td>{{ user.gender }}</td>
# 模块化输出数据库数据

Django创建表关系

"""
一对一
一对多
多对多
"""

我们以图书表、出版社表、作者表、作者详情表为例创建

# 判断表关系:换位思考法
分析表关系:
    图书表和出版社表是一对多的关系    >>> 外键如何创建:外键字段建在多的一方
    图书表和作者表是多对多的关系      >>>  外键如何创建:外键字段建在第三张表中
    """
        创建多对多的方式有3种方式,先将一种
        
    """
    作者表和作者详情是一对一的关系       >>>  外键如何创建:外键字段建在查询频率较高的一方
    
# 创建表关系字段先创建表的基础字段,先创建没有的外键的,最后在写外键字段

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了,它会自定的拼接_id"""
    publish = models.ForeignKey(to='Publish')  # 创建外键的 默认就是跟表的主键字段建立关系
    """
        authors:它是一个虚拟字段,意思是,在book表中不会实际创建出来这个字段,它能够创建出来第三张表(自动)
    """
    authors = models.ManyToManyField(to='Author', )


class Publish(models.Model):
    title = 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')
    
    
# django1版本
on_delete
当删除关联表中的数据时,当前表与其关联的行的行为。

models.CASCADE
删除关联数据,与之关联也删除

models.DO_NOTHING
删除关联数据,引发错误IntegrityError

models.PROTECT
删除关联数据,引发错误ProtectedError

models.SET_NULL
删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空)

models.SET_DEFAULT
删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值)

models.SET
删除关联数据,
a. 与之关联的值设置为指定值,设置:models.SET(值)
b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)

# django2

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了,它会自定的拼接_id"""
    publish = models.ForeignKey(to='Publish', on_delete=models.CASCADE)  # 创建外键的 默认就是跟表的主键字段建立关系
    """
        authors:它是一个虚拟字段,意思是,在book表中不会实际创建出来这个字段,它能够创建出来第三张表(自动)
    """
    authors = models.ManyToManyField(to='Author', )


class Publish(models.Model):
    title = 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)
    qq = models.CharField(max_length=64)

Django框架的请求生命周期

其实就是帮我们梳理Django框架的执行流程,它能够更好地帮助我们后面的复习

 

 

标签:Python,max,基础,request,外键,id,models,user,day55
From: https://www.cnblogs.com/zfq132/p/17588927.html

相关文章

  • python基础语法
    变量和简单的数据类型变量变量的命名规则:1、只能包含字母、数字和下划线,并且不能以数字开头2、变量名中不能是python中的保留字字符串字符串的几种定义方法name='Bob'name="Bob"name="""Bob"""如何字符串本身包含单引号或者双引号,我们可以用与包含相反的方式去定......
  • 软件测试|Python科学计算神器numpy教程(十)
    numpy字符串处理简介NumPy是一个功能强大的Python库,主要用于科学计算和数据处理。除了处理数值数据外,NumPy还提供了一些强大的字符串处理功能。本文将介绍NumPy中常用的字符串处理函数,包括字符串拼接、切片、查找、替换等操作,展示NumPy在字符串处理方面的优势。字符串拼接NumPy提供......
  • 软件测试|Python科学计算神器numpy教程(十一)
    NumPy数学函数:强大的数值计算工具简介NumPy是Python中广受欢迎的科学计算库,提供了丰富的数学函数,可用于处理数组和矩阵中的数值数据。这些数学函数包含了许多常见的数学运算,如三角函数、指数函数、对数函数、统计函数等。本文将介绍NumPy中一些常用的数学函数及其用法,展示NumPy在数......
  • 软件测试|如何更新已经安装的Python第三方库
    简介当我们使用Python开发项目时,经常会依赖于各种第三方库来扩展功能或提高效率。这些库经常会发布新的版本,包含了修复漏洞、增加新特性或改进性能等更新。因此,及时更新和升级你的第三方库是很重要的。在Python中,可以使用pip工具来管理和更新这些库。在本文中,将介绍如何使用pip来更......
  • mysql基础架构
    基础架构Mysql基础架构图[1]mysql主要分为Service层和存储引擎一.Service层包含MySQL的大部分功能;请求进入后,到数据提取前的所有操作;包含连接器,查询缓存,分析器,优化器,执行器,还有所有的内置函数(日期,时间,数学和加密函数),所有跨存储引擎的功能都在这一层实现:存储过程......
  • Python数据可视化-动态柱状图可视化
    Python数据可视化-动态柱状图可视化一、基础柱状图通过Bar构建基础柱状图"""演示基础柱状图的开发"""frompyecharts.chartsimportBarfrompyecharts.optionsimportLabelOpts#使用Bar构建基础柱状图bar=Bar()#添加x轴的数据bar.add_xaxis(["中国","美国","英......
  • Python编码错误:no encoding declared
    问题描述Python文件中如果未指定编码,在执行过程会出现报错:....,butnoencodingdeclared....问题原因Python中默认的编码格式是ASCII格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错。Python3.X源码文件默认使用utf-8编码,所以可以正常解析中文,无需指定......
  • Python sorted() 函数和sort()函数对比分析
    Pythonsorted()函数一、概述sorted()函数是对所有可迭代的对象进行排序操作。sort与sorted的区别:sort是应用在list上的方法,sorted可以对所有可迭代的对象进行排序操作。list的sort方法返回的是对已经存在的列表进行操作,无返回值,而内置的sorted函数返回的是一个新的list,而不是......
  • 物料编码、BOM、ERP基础培训
    以前整理的一个PPT分享给大家,可以作为基础资料了解了解,希望对刚入门的朋友有所帮助.        ......
  • PyTorch基础知识-新手笔记
    PyTorch是Facebook团队于2017年1月发布的一个深度学习框架。PyTorch采用Python语言接口来实现编程,就像带GPU的NumPy,与Python一样属于动态框架。PyTorch继承了Torch灵活、动态的编程环境和用户友好等特点,支持以快速与灵活的方式构建动态神经网络,还允许在训练过程中快速更改代码而不......