Djangon 基础总结 汇总 从请求到返回页面的过程,
第一步我是用户 现在 浏览器上输入地址 ---》 发送给服务 来请求返回当前的页面

第二步 服务端获得我当前的客户端要求访问的地址

第三步 服务端去urls.py中去,来看是要访问那个地址 看到是 classlist 它对应的函数名是classlist

第四步 根据地址对应的 函数去执行函数classlist

#函数执行功能,最后的一句话是将 HTML文件返回给客户端 浏览器 ,并将信息 返回给客户端
# 浏览器接受返回过来的信息,按照HTML 规则渲染页面

关于render 语句用于将信息返回给页面并渲染的功能
获取网页内容执行的函数
def classlist(request):
conn=pymysql.connect(host='localhost',database='db1',user='root',
password='',charset='utf8')
#这个是将下边的获取的ret的类型转换成字典类型,
# 因为他从数据库中获得的数据是((5, '全栈9期'), (6, '全栈10期'))这种元祖类型的,不利于取值
#[{'id': 5, 'cname': '全栈9期'}, {'id': 6, 'cname': '全栈10期'}] 写上这句的话就转换成字典类型
#有利于后台去获取值并将数据显示出来
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor) sql='select id,cname from class order by id '
#把数据库中的表单的数据全部获取出来
cursor.execute(sql)
#将获取的数据放到这个变量中 此时已经是字典形式的了
ret=cursor.fetchall()
print(ret)
#将网页,字典以键值对的形式返回给html文件
return render(request,'class_list.html',{'class_list':ret}) #那边写的是class_list 就能够得到它对应的值 ret 这个字典
HTML代码中的对应写法
{% for class in calss_list %} #开头 Django 支持这种循环,只要写一个这种代码就可以 以循环的形式将内容添加到网页中去
<tr>
<th scope="row">{{ class.id }}</th>
<td>{{ class.cname }}</td> #取值 .cname 是对应的数据库中的字段名{'id': 6, 'cname': '全栈10期'}
<td class="text-center">
<button type="button" class="btn btn-sm btn-success" aria-label="Left Align">
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>编辑
</button>
<button type="button" class="btn btn-sm btn-danger" aria-label="Left Align">
<a href="/delete/?id={{ class.id }}">删除</a>
</button>
</td>
</tr>
{% endfor %} # 结尾
添加功能和对应的HTML中的表单写法 用到了form表单
第一步先点击 添加1 按钮

添加一中绑定这 a标签 跳转标签
<button type="button" class="btn btn-success pull-right" ><a href="/update/">添加1</a> #herf="/update/" 当是地址一致,只是末尾不一样的时候就跳
</button> 跳到末尾的这个地址
此时 又向服务端发送请求 http://127.0.0.1:8001/update/ 它的尾端是 /update/
此时在判断后执行 upate函数
# 添加功能
def update(request):
#开始过来的的时候请求的信息是GET 所以不会执行这一个if 条件下的内容,而是去执行下边的内容
if request.method=='POST':
rename=request.POST.get('name')
print(rename)
conn = pymysql.connect(host='localhost', user='root', password='', database='db1', charset='utf8')
cursor = conn.cursor()
sql = 'insert into class(cname)VALUES (%s);'
ret = cursor.execute(sql,rename )
print(ret)
conn.commit()
cursor.close()
conn.close()
return redirect('/classlist/')
#因为服务端得到的是GET请求,所以他就不执行if语句,
# 执行这一句 将网页返回给请求端
return render(request,'tianjia.html')
得到页面

将数据写完执行 提交按钮

这时候要看form表单中的对应代码了
<body>
# action="/update/" 的意思是将数据提交到 /update/这个网页
# method="post" 意思是方法是post 在后边的函数中取
#request.method 在后端的时候就能取到 POST 这个方法 执行if与句中的内容
<form action="/update/" method="post">
<span>姓名</span>
<input type="text" name="name">
<input type="submit">
</body>
这是后看这个代码 这时候if 中的条件成立
def update(request):
#开始过来的的时候请求的信息是GET 所以不会执行这一个if 条件下的内容,而是去执行下边的内容 注意 点击提交的时候这if 条件成立 执行这个语句 将数据添加到数据库中
if request.method=='POST':
rename=request.POST.get('name') #取到添加的数据 即 name 对应的 value 值
print(rename)
conn = pymysql.connect(host='localhost', user='root', password='', database='db1', charset='utf8')
cursor = conn.cursor()
sql = 'insert into class(cname)VALUES (%s);'
ret = cursor.execute(sql,rename ) 添加到数据库中去
print(ret)
conn.commit()
cursor.close()
conn.close()
return redirect('/classlist/') 添加完 提交后 跳转到 /classlist/ 对应的网页
#因为服务端得到的是GET请求,所以他就不执行if语句 ,
# 执行这一句 将网页返回给请求端
return render(request,'tianjia.html')

Djangon 基础总结 汇总 从请求到返回页面的过程,的更多相关文章
- day 7 - 1 集合、copy及基础数据类型汇总
集合:{},可变的数据类型,他里面的元素必须是不可变的数据类型,无序,不重复.(不重要)集合的书写 set1 = set({1,2,3}) #set2 = {1,2,3,[2,3],{'name':' ...
- 沉淀,再出发:Java基础知识汇总
沉淀,再出发:Java基础知识汇总 一.前言 不管走得多远,基础知识是最重要的,这些知识就是建造一座座高楼大厦的基石和钢筋水泥.对于Java这门包含了编程方方面面的语言,有着太多的基础知识了,从最初的 ...
- jquery基础知识汇总
jquery基础知识汇总 一.简介 定义 jQuery创始人是美国John Resig,是优秀的Javascript框架: jQuery是一个轻量级.快速简洁的javaScript库.源码戳这 jQu ...
- 多个网络请求成功返回再执行另外任务的思路分析(iOS)
前言 今天我们来讨论一个经常出现的需求场景,也是一个老话题.在开发中我们往往会遇到需要进行多个网络请求,并且需要多个网络请求成功返回后再做其他事的场景.比如同一个界面显示的内容需要用到两个网络接口,而 ...
- laravel基础课程---6、请求(如何获取当前 HTTP 请求的实例)
laravel基础课程---6.请求(如何获取当前 HTTP 请求的实例) 一.总结 一句话总结: 依赖注入:通过依赖注入的方式来获取当前 HTTP 请求的实例:public function sto ...
- 你所不知道的库存超限做法 服务器一般达到多少qps比较好[转] JAVA格物致知基础篇:你所不知道的返回码 深入了解EntityFramework Core 2.1延迟加载(Lazy Loading) EntityFramework 6.x和EntityFramework Core关系映射中导航属性必须是public? 藏在正则表达式里的陷阱 两道面试题,带你解析Java类加载机制
你所不知道的库存超限做法 在互联网企业中,限购的做法,多种多样,有的别出心裁,有的因循守旧,但是种种做法皆想达到的目的,无外乎几种,商品卖的完,系统抗的住,库存不超限.虽然短短数语,却有着说不完,道不 ...
- Python的Django REST框架中的序列化及请求和返回
Python的Django REST框架中的序列化及请求和返回 序列化Serialization 1. 设置一个新的环境 在我们开始之前, 我们首先使用virtualenv要创建一个新的虚拟环境,以使 ...
- ORACLE| ORACLE基础语法汇总
创 ORACLE| ORACLE基础语法汇总 2018-07-18 16:47:34 YvesHe 阅读数 9141更多 分类专栏: [数据库] 版权声明:本文为博主原创文章,遵循CC 4.0 B ...
- 基于jFinal建立简单的服务端-接收请求并返回指定内容
本菜鸡是一名弱弱的测试工程师,最近完成了一个支付相关的项目,项目工作中,需要建立一个模拟支付宝的网关,主要是接收请求并返回数据.作为一名没有丝毫开发经验的菜鸡,初期入门相当费劲,主要还是思维上的转变. ...
随机推荐
- matlab运行中出现“Caught "std::exception" Exception message is: Message Catalog MATLAB:builtins was not loaded from the file."
在我运行过程中,经常爆出这一不确定是什么的问题,经排查后发现,原来是fopen 文件后,没有及时fclose导致的.
- 网站如何实现 在qq中发自己链接时,便自动获取链接标题、图片和部分内容
如何实现像这种效果?答案如下(要采用分享的形式,复制链接有可能会实现不了效果,至少我的测试是这样的) <head>标签内有QQ专有的标签可以控制要注意QQ的缓存机制,对同一个链接,修改后可 ...
- Storm介绍&实际开发注意事项
一.使用组件的并行度代替线程池 Storm 自身是一个分布式.多线程的框架,对每个Spout 和Bolt,我们都可以设置其并发度:它也支持通过rebalance 命令来动态调整并发度,把负载分摊到多个 ...
- 框架:初识Spring
Spring篇 第一章.Spring简介 一.Spring的体系结构 1.介绍 Spring有20多个的模块,这些模块分布与核心容器(Core Container).数据访问/集成(Data Acce ...
- 利用itext生成pdf的简单例子
一.itext简介 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文 ...
- tp5 Excel导出
1.百度搜索 PHPexcel (这是一个PHP类库) 2.下载的文件放到vendor里(这是tp5专门放置类库文件的) 下面是代码 /** * 导出 */ public function expor ...
- 引用google字体
1.很简单直接 @import url(http://fonts.font.im/css?family=Shadows+Into+Light); 引入页面即可 2. 使用: font-fami ...
- JAVA Collections.shuffle打乱列表
在JAVA中如果想打乱LIST的顺序可以调用Collections.shuffle()或者Collections.shuffle(List<?> list, Random rnd)方法. ...
- SpringdataJpa的官方API学习
(将对Springdata JPA的API 第三章之后进行解释) 一 . Core concepts(核心概念) 1.springdata中的中心接口是——Repository.这个接口没有什么重 ...
- SQL注入之Sqli-labs系列第二十五关(过滤 OR & AND)和第二十五A关(过滤逻辑运算符注释符)
开始挑战第二十五关(Trick with OR & AND) 第二十五关A(Trick with comments) 0x1先查看源码 (1)这里的or和and采用了i正则匹配,大小写都无法绕 ...