ORM对数据的增删改查,动静态网页,Django创建表关系,Django框架的请求生命周期流程图
1.Django框架的学习,主要文件介绍,应用,小白必会三板斧2.配置文件的介绍,静态文件的配置,request对象请求方法,pycharm连接数据库,Django连接MySQL,Django中的ORM,ORM增删改查3.url函数的使用,无名分组和有名分组,反向解析,django2中5种转换器,路由分发,伪静态的概念,虚拟环境4.视图层:三板斧问题,JsonResponse序列化,form表单上传文件,request对象的其他几个方法,CBV的书写和FBV的写法,CBV的源码分析.模板层:变量之分配,过滤器5.模板之标签,if 标签,模板的继承.模型层:常见的十几种查询方法.测试环境的搭建,查看原生sql语句,基于双下滑线的查询,外键字段的查询6.外键字段的增删改查,多表查询,正反向的概念,子查询,多表查询之连表查询(基于双下划线的查询),聚合查询(aggregate),分组查询annotate,F与Q查询,django中如何开启事务7.choices参数的使用,MTV和MVC的概念,多对多的三种创建方式,Ajax技术简介,小案例8.前后端数据传输的编码格式,Ajax提交json格式的数据,Ajax提交文件数据,AJax结合layer弹窗实现删除的二次确认,批量插入数据9.推导分页的原理,分页类的使用,cookie和session的介绍(重要),Django操作cookie10.Django操作cookie,Django操作session,Django中的Session配置,CBV添加装饰器,中间件,csrf跨站请求11.csrf跨站请求的相关装饰器,Auth模块的使用,相关方法
12.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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!