首页 > 其他分享 >- 通过结合前端页面实现ORM对数据的增删改查 - Django中如何创建表关系 - 一对一 - 一对多 - 多对多 - Django框架的请求生命周期流程图 - 路由层urls.py -

- 通过结合前端页面实现ORM对数据的增删改查 - Django中如何创建表关系 - 一对一 - 一对多 - 多对多 - Django框架的请求生命周期流程图 - 路由层urls.py -

时间:2023-07-30 15:44:25浏览次数:38  
标签:models max py 视图 Django length 外键 创建 CharField

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

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

1.首先在数据库创建一个表格

  1.在model.py中创建表格

   2.python manage.py makemigratins迁移记录

      3.python manage.py migrate创建表格

2.创建一个展示页面

  1.定义一一个函数用来展示用户数据,需要给表的类 增加一个——str——的方法

   2. 创建一个HTML文件 

补充:变量分配

 方法

  rander()中的第三个参数为关键字参数 我们可以写成{k:v}的形式,k我们可以随便定义,v就是函数中的变量

  locals()匹配出函数的中的局部变量

  通过这个方法我们就可以在HTML中展示数据库中的数据

  html固定语法:{ {} }

3.利用locls方法匹配出数据的信息

  1.匹配出信息,在html中特定格式:循环打印数据库中的数据

    {% for foo in user_l %}
    {% endfor %}

  2.locals()相当于{'user_l':user_l}

  3.具体的数据就要用{ {foo.k值} }

案例

函数

 HTML

 

修改页面数据

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

删除功能的逻辑

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

动静态页面

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

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

 

django创建表关系

三种关系

  一对一

  一对多

  多对多

例子:图书表、出版社表、作者表、作者详情表为例创建

判断表关系:换位思考

分析表关系:

图书表和出版社表是一对多的关系 >>> 外键如何创建:外键字段建在多的一方
图书表和作者表是多对多的关系 >>> 外键如何创建:外键字段建在第三张表中

作者表和作者详情是一对一的关系    >>>  外键如何创建:外键字段建在查询频率较高的一方  

ps:创建表关系字段先创建表的基础字段,先创建没有的外键的,最后在写外键字段

创建小数

  .DecimalField(max_digits=8, decimal_places=2) 

    max_digits=None, 总共多少位
    decimal_places=None 小数占几位

一对多创建外键

  .ForeignKey(to='Publish', to_field='id') 

创建外键的 默认就是跟表的主键字段建立关系,to_field='id'参数可以不写

多对多创建外键

  .ManyToManyField(to='Author' )

它是一个虚拟字段,意思是,在book表中不会实际创建出来这个字段,它能够创建出来第三张表(自动)

如果你的字段是主键字段,那么,你就不用在字段的后面拼接_id了,它会自定的拼接_id

一对一创建外键

  .OneToOneField(to='AuthorDetail')

案例

class Book(models.Model):
    title = models.CharField(max_length=64, verbose_name='书名')
    prince = models.DecimalField(max_digits=8, decimal_places=2)
    publish = models.ForeignKey(to='Publish')


class Publish(models.Model):
    title = models.CharField(max_length=64)
    addr = models.CharField(max_length=64)
    authors = models.ManyToManyField(to='Author')


class Author(models.Model):
    name = models.CharField(max_length=64)
    author_detail = models.OneToOneField(to='AuthorDetail')


class AuthorDetail(models.Model):
    phone = models.CharField(max_length=64)
    qq = models.CharField(max_length=64)

Django版本1与Django版本2创建表关系之间的区别

Django2中少一个参数,需要我们自己上传,Django1中有默认值,这个参数就是:on_delete

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 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框架的执行流程,他能够更好的帮助我们后面的复习

 

流程逻辑

 中间件可以自己写,跟在七个中间件后面

 

标签:models,max,py,视图,Django,length,外键,创建,CharField
From: https://www.cnblogs.com/shanghaipudong/p/17588858.html

相关文章

  • python数据分析师入门-学习笔记(第九节 爬虫的核心流程)
    学习链接:Python数据分析师入门爬虫的核心流程明确目标汽车成交量汽车评论信息汽车提车分享信息搜寻哪些网站或APP有我们要的资源汽车之家懂车帝易车分析数据所在位置,加载方式直接加载的额外的网络请求数据获取使用代码驱动APP或浏览器自己分析请求......
  • django(视图层)
    一、三板斧'''HttpResponse返回字符串类型render返回html页面,并且在返回给浏览器之前还可以给html文件传值redirect重定向'''#视图函数必须返回一个HttpResponse对象正确#看三者的源码(render和redirect继承HttpResponse类)Theviewapp01.views.in......
  • python数据分析师入门-学习笔记(第八节 python爬虫的准备工作)
    学习链接:Python数据分析师入门python爬虫的准备工作一台电脑尽量windows电脑语言环境编程语言爬虫并不是python独有Python开发环境Anaconda了解爬虫的实现和原理用代码去控制终端用代码直接发送请求CS(客户端服务器)/BS(浏览器服务器)模型CS/BS浏览......
  • 权重衰退——pytroch版
    importtorchfromtorchimportnnfromd2limporttorchasd2l#将数据做的很小,这样容易实现过拟合n_train,n_test,num_inputs,batch_size=20,100,200,5true_w,true_b=torch.ones((num_inputs,1))*0.01,0.05train_data=d2l.synthetic_data(true_w,true......
  • 丢弃法——pytroch版
    importtorchfromtorchimportnnfromd2limporttorchasd2ldefdropout_layer(x,dropout):assert0<=dropout<=1ifdropout==1:returntorch.zeros_like(x)ifdropout==0:returnx#取0-1上的均匀随机分布,>dropout则=1,否......
  • python网站创建005:(接收数据)和(发送数据)
    目标:如何从前端接收数据?如何将数据发送到前端? 1.如何(接收数据)   2.如何(发送数据)?  ......
  • python数据分析师入门-学习笔记(第七节 爬虫如何搞钱)
    学习链接:Python数据分析师入门爬虫如何搞钱入职企业,找一份爬虫工程师的岗位抢购最火的茅台电商平台秒杀羊毛出自猪身上看小说(投放广告)引流比价购物助手点赞、收藏、刷粉丝、刷评论、刷播放量核心资源的整合......
  • python适配器模式
    classA:  defcost(self):    print('costa')​​classB:  defcost(self):    print('costb')​​classMyAdapter:​  def__init__(self,obj):    self.obj=obj​  defpay(self):    self.obj.cost()​​adt_a=MyAd......
  • python数据分析师入门-学习笔记(第六节 爬虫合法吗)
    学习链接:Python数据分析师入门爬虫合法吗机器人协议robots.txt协议中规定了哪些内容可以获取,哪些内容不能获取通常协议中会标明哪些不让爬baidu.com/robots.txttaobao.com/robots.txt君子协议未标注是否可以爬取历史上哪些工程师被抓有一家公司被一锅端工程......
  • python数据分析师入门-学习笔记(第五节 爬虫分类)
    学习链接:Python数据分析师入门爬虫分类1.聚焦爬虫-完成某一项特定数据的采集-百分之九十的爬虫2.通用爬虫-什么内容都采集,存储下来-搜索引擎3.增量爬虫-既可以使用聚焦爬虫,也可以使用通用爬虫-当内容变化时,可以爬取变化的内容4.暗网爬虫-深网爬......