ORM对数据的增删改查,动静态网页,Django创建表关系,Django框架的请求生命周期流程图

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

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

# 表格的展示页面

'''思考修改功能的逻辑:'''
1、 确定修改哪条记录,怎么确定?  通过主键id确定唯一一条记录
2、点击修改的按钮,应该跳转到一个修改的页面
3、应该通过id查询到原来的数据,并且把这个记录的数据展示到修改的页面
4、开始修改,提交到后端的修改数据的方法中

'''删除功能的逻辑:'''
1、确定删除哪条记录,怎么确定?  通过主键id确定唯一一条记录
2、点击删除的按钮,请求到后端的删除地址
3、后端拿到id直接做删除操作、跳转到列表页面

以上增删改查的方法:

1. 查询:把数据表中所有的数据展示到页面上
	select * from user; # filter-------->where
	res=models.表名.objects.filter(查询条件).all()  # 查询所有的数据
    res=models.表名.objects.filter()  # 查询所有的数据
    # res-------->queryset对象--------->[对象,对象1]
    '''我们可以直接对queryset对象进行循环处理'''
    # filter()里面可以直接写查询条件,如果有多个条件是and关系
2. 增加
    # 第一种方式
	models.表名.objects.create(**kwargs)
    models.表名.objects.create(username=username,password=password)
    增加数据也有返回结果,就是当前插入成功的数据
    # 用户注册,往数据表中添加数据
    # 第二种方式
    res=models.类名(username=username,password=password)
    res.save()

 3. 修改,更新
	models.表名.objects.filter(username=username,password=password).update(**kwargs)全表更新
返回的结果影响行数
    # 第二种方式修改
    res=res=models.表名.objects.filter().first()  # --------->对象
    res.username = username
    res.password = password
    res.save()
    '''用在修改数据上面,修改一条记录的逻辑是什么?'''
    # 1. 先给修改的按钮添加一个地址,地址后面要跟个参数(id)
    	<a href='/index/?id=1'>
        <a href='/index/?id={{user_obj.pk}}'>
        
    # 2. 把参数id提交到后端,后端通过GET形式接收参数id,拿到这个id之后,去查询记录
    
    # 3. 把查询出来的字段数据给input的value属性,在页面上展示
    
    # 4. 开始进行修改,把新修改的数据提交到后端,并且以POST请求方式,然后,后端在用POST形式,接收新修改的数据,进行更改
4. 删除
	# 1. 物理删除,直接从磁盘中删除
    res=res=models.表名.objects.filter().delete()
    
    # 2. 软删除(以后建议使用软删除,当然也要按照实际情况来)
    在表中加一个字段,is_delete-------->默认值0
    在删除的时候,把is_delete这个字段的值改为1,做一个更新操作
    
'''在查询的时候,一定要加上过滤条件,is_delete=0'''

动静态网页

静态网页
	# 在页面上写死的数据,一直不会改变的都是静态网页

动态网页
	# 动态网页是从后端获取到的数据在页面展示
    # 数据是从数据库中查询出来的也是动态网页

Django创建表关系

"""
三种关系:
一对一
一对多
多对多
# 当你在创建表的时候,先创建基础字段,然后在考虑关系字段,外键字段

我们用django中得ORM来创建
# 在models.py中创建表关系
一对多: models.ForeignKey(to='被关联的表名', to_field='被关联的表名中得字段')
一对一: models.OneToOneField(to='被关联的表名')
多对多: models.ManyToManyField(to='被关联的表名')
'''如果被关联的表中是主键字段,to_field字段可以不写,默认就是主键'''
"""

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

# 判断表关系:换位思考法
分析表关系:
	图书表和出版社表是一对多的关系    >>> 外键如何创建:外键字段建在多的一方
    图书表和作者表是多对多的关系      >>>  外键如何创建:外键字段建在第三张表中
    """
    	创建多对多的方式有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框架的请求生命周期流程图

面试口述:

1.用户先从浏览器发起HTTP请求 
2.请求就来到了web服务器(web服务网关接口) socktet部分 Wsgiref模块实现的socket服务端 
1.请求来的时候,把HTTP格式的数据封装打包成一个字典 
2.响应走的时候,把数据封装成符合HTTP格式的数据返回给浏览器 
# 后面还给它改成uwsgi服务器
# wsgiref、uwsgi他们两个也都会遵循一个协议:WSGI协议 
https://www.yuque.com/liyangqit/cbndkh/evyps8
 3.Django应用
 4.中间件
 5.路由层
 6.视图层 
7.模板层 
8. DB

posted @   毓见  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示