Django之ORM数据库增删改查
总结:ORM的 查、增、删、改
- 查
- client
- 有一个展示页面(xxx_show.html)
- 这一个页面一输入执行后,get请求向server端发送
- 这个展示页面有添加按钮、删除按钮、编辑按钮
- 这个页面要展示内容
- 是server端收到第一次的get请求而做出的response
- 页面需要用到模板语言for循环
{% for i in result %}
{{ i.xx }} #获取result中的每个值(也就是server端传来的东西)
{% endfor %}
- server
- 首先会收到一开始访问页面的GET请求
- 收到请求后到urls中找匹配的url,找到对应的url后,执行后面所对应的视图函数
- 找到对应的视图函数后就行执行响应的逻辑,也就是拿出数据库中的东西,发送给server
- 可以通过 models.表名.objects.all() 获取数据库这张表中的所有内容(返回一个列表)
- data = models.表名.objects.all()
- 拿到数据后将这些数据给展示(通过render方法)
- return render(request, 'xxx_show.html', 'result':data)
#这里的result就是要传给xxx_show.html的一个变量(其中的值就是data的数据)
- 增
- client
- 有一个展示页面(xxx_show.html)
- 这个页面有一个添加按钮(a标签)
- 点击这个按钮(a标签),client会发送一个get请求,会用a标签的路径去访问server
- 这时会跳转到a标签所指的url(/add_xxx/)
- 然后server给出response(这里的业务逻辑就都得在server)
- 第一次get请求server会返回一个add_xxx.html页面
- 这是可以添加数据
- 用form表单,action为add_xxx这个url,method为post
- 点击提交之后client向server发送一个请求
- server收到请求后回复一个response
- server
- 收到a标签跳转的url(get请求响应)
- 收到add_xxx这个url进入urls中匹配,匹配到就去他对应的视图函数
- 这个视图函数处理响应的业务逻辑
- 首先第一次来的时候时GET请求,这个时候应该将add_xxx.html这个页面返回给client
- return render(request, add_xxx.html)
- 然后server收到提交的POST请求
- 从POST请求中拿出client发送来的数据
- data = request.POST.get("input标签的name")
- 将数据存入数据库
- models.tablename.objects.create(字段=data)
- 将数据库中的结果重新返回(也就是xxx_show。html)
- return redirect('/xxx_show/')
- 删
- client
- 有一个展示页面(xxx_show.html)
- 有一个删除按钮(a标签)
- 点击这个按钮(a标签),client会发送一个get请求,会用a标签的路径去访问server
- 点击这个a标签(按钮)会跳转到他对应的url('/del_xxx/')
- 这时需要将这个按钮对应的数据传到server,server才能按照这个数据去删除
- <a href="/del_xxx/?id={{ i.id }}"><button>del</button></a>
- ?是一个固定格式,而后面就是一些参数(服务端要用的一些参数)
- server收到这个参数后就可以按照他进行相应的操作
- 然后server会返回一个response(这里的业务逻辑在server端)
- server
- 收到a标签跳转的url(get请求响应)
- 收到del_xxx这个url进入urls中匹配,匹配到就去他对应的视图函数
- 这个视图函数处理响应的业务逻辑
- 通过client传来的参数来锁定删除的id
- del_id = request.GET.get("id")
- 删除数据库中del_id对应的值
- models.tablename.objects.fileter(id=del_id).delete()
- 删除成功后返回删除后的页面('/xxx_show/')(重定性)
- return redirect('/xxx_show/')
- 改
- client
- 有一个展示页面(xxx_show.html)
- 有一个编辑(edit)按钮(a标签)
- 点击这个按钮(a标签),client会发送一个get请求,会用a标签的路径去访问server
- 点击这个a标签(按钮)会跳转到他对应的url('/edit_xxx/')
- 这时需要将这个按钮对应的数据传到server,server才能更改这个数据
- <a href="/edit_xxx/?id={{ i.id }}"><button>del</button></a>
- ?是一个固定格式,而后面就是一些参数(服务端要用的一些参数)
- server收到这个参数后就可以按照他进行相应的操作
- 然后server会返回一个response(这里的业务逻辑在server端)
- 第一次发送get请求时会跳转到edit_xxx.html这个页面,这里面是该行对应的数据
- 第二次发送post请求,这里面会有修改后的数据然后发送给server处理
- <form action="/edit_press/?id={{ result.id }}" method="post">
<input type="text" name="updata_name" value="{{ result.name }}">
<input type="submit">
</form>
- input中的数据都是在server查出的数据展现出来的
- id是通过点击edit按钮的时候将这个按钮对应的id值记录了下来
- 处理完后返回原来的xxx_show
- server
- 收到a标签跳转的url(get请求响应)
- 收到edit_xxx这个url进入urls中匹配,匹配到就去他对应的视图函数
- 这个视图函数处理响应的业务逻辑
- 第一遍的GET请求
- 通过client传来的参数来锁定编辑(edit)的id
- edit_id = request.GET.get("id")
- 会返回当前编辑行的内容
- 从数据库中拿出这个值,将这个值展现在edit_xxx.html页面中
- result = models.tablename.objects.filter(id="")[0]
- 返回当前编辑的页面
- return render(request, 'edit_xxx.html', {'resule': result})
- 第二遍请求是提交数据后的POST请求,
- form表单中的action为这个编辑页面,
- 这个页面后面的参数为第一次get请求得到的数据
- 可以通过GET方法来获取URL上的参数的值
- 这个时候form表单对应的url来urls中找对应的视图函数
- 这个视图函数就会执行POST请求的逻辑
- 用这个新数据把数据库中的旧数据掩盖
- 获取更改后的值
- data = request.POST.get("updata_name")
- 更改数据库中的值
- 从数据库找到id对应的对象
- #这里的id就是第一次点击编辑的时候得到的id值(--对应的)
- new_obj = models.tablename.objects.filter(id='edit_id')[0]
- new_obj.name = data #将新的值赋值给数据库中的变量
- new_obj.save() #这个事务必须save数据库中的数据才会更改
- 更改完成后返回,xxx_show页面
- return redirect('/xxx_show/')
注意:
通过GET来获取URL中的值,POST获取表单提交的值。
Django之ORM数据库增删改查的更多相关文章
- Django ORM 数据库增删改查
Django ORM 数据库增删改查 增 # 创建.增加数据(推荐) models.UserInfo.objects.create(username=') # 创建.增加数据 dic = {'} mo ...
- Python学习---django之ORM的增删改查180125
模型常用的字段类型参数 <1> CharField #字符串字段, 用于较短的字符串. #CharField 要求必须有一个参数 maxlength, 用于从数 ...
- Django基础之数据库增删改查
Django中生成多个APP,每个APP下都有自己models模块,避免了多个APP之间数据的相互影响. 1.首先在APP的models下创建一个类 class UserInfo(models.Mod ...
- 使用django连接数据库 对数据库 增删改查
如果路由访问的时候出现 就把项目中的注释掉 登录功能 1 路由访问如果不加斜杠 会内部自动重定向加斜杠的路由 所有的静态文件(css,js,前端第三方类库)默认都放在static文件下 #静态文件配置 ...
- Django之ORM的增删改查操作流程
总结:ORM的 查.增.删.改 - 查 - client - 有一个展示页面(xxx_show.html) - 这一个页面一输入执行后,get请求向server端发送 - 这个展示页面有添加按钮.删除 ...
- Django的ORM基础增删改查
查询 all() 返回模型类对应表格中所有数据,返回查询集 get() 返回表格中满足条件的一条且只能有一条数据 如果查到多条数据,则抛异常:MultipleObjectsReturned 查询不到数 ...
- Django之ORM的增删改查
一.添加表记录 对于单表有两种方式 # 添加数据的两种方式 # 方式一:实例化对象就是一条表记录 Frank_obj = models.Student(name ="海东",cou ...
- ADO.NET ORM数据库增删改查封装(工具一)
约束 public abstract class BaseModel { public int Id { get; set; } } 连接字符串 public static readonly stri ...
- go——beego的数据库增删改查
一直都不理解使用go语言的时候,为什么还要自己去装beego,以为使用go便可以解决所有的问题,结果在朋友的点拨下,才意识到: go与beego的关系就好比是nodejs与thinkjs的关系,因此也 ...
随机推荐
- 7.gcc的使用
什么是gcc gcc编译器(GNU C Compiler) 现在我们所说的 gcc 是 GUN Compiler Collection的缩写,可以支持多种语言编译,比如 C,C++,Java, pas ...
- ORACLE RAC 11G 添加以及删除UNDO表空间
在生产环境上,由于闪存盘的容量有限,现在需要将闪存盘里面的UNDO表空间,替换到非闪存的磁盘里面. 磁盘的使用情况如下: 表空间使用情况如下: RAC两个节点占用将近167G的空间. 操作步骤如下: ...
- linux中openssl生成证书和自签证书
1.首先要生成服务器端的私钥(key文件): 命令: openssl genrsa -des3 -out server.key 1024 运行时会提示输入密码,此密码用于加密key文件(参数des3便 ...
- SVG实现波浪效果
SVG实现波浪效果 svg path:C 贝塞尔曲线绘制波浪形状 A 绘制圆弧形 svg animate:制作波浪动画,为了波浪动画效果自然,设置values关键点 attributeName: ...
- UNP学习笔记2——从一个简单的ECHO程序分析TCP客户/服务器之间的通信
1 概述 编写一个简单的ECHO(回复)程序来分析TCP客户和服务器之间的通信流程,要求如下: 客户从标准输入读入一行文本,并发送给服务器 服务器从网络输入读取这个文本,并回复给客户 客户从网络输入读 ...
- HDU 1052 Tian Ji -- The Horse Racing【贪心在动态规划中的运用】
算法分析: 这个问题很显然可以转化成一个二分图最佳匹配的问题.把田忌的马放左边,把齐王的马放右边.田忌的马A和齐王的B之间,如果田忌的马胜,则连一条权为200的边:如果平局,则连一条权为0的边:如果输 ...
- C语言-实现整数倒序输出
Action() { //实现一个3位数的倒序输出(123输出321) int n; int m=321; n=fun_mod(m,n); lr_output_message("%d&quo ...
- iOSUI显示思想
两级显示机制: 1.cpu: 2.GPU: 和操作系统的多级缓存机制有点类似.
- P3387 【模板】缩点 && P3388 【模板】割点(割顶)
Tarjan算法 应用: 有向图的强连通分量 无向图割点和桥 双连通分量 接下来主要谈论前面两者的应用(主要是第三种还没学会) 算法简要介绍 我们需要先理解一下知识:搜索树 有向图的搜索树的4种边,如 ...
- CentOS 7 安装配置MySQL
环境 CentOS Linux release 7.5.1804 (Core) MySQL:mysql80-community-release-el7-1 检查: 在centos7中默认的是maria ...