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建立简单的服务端-接收请求并返回指定内容
本菜鸡是一名弱弱的测试工程师,最近完成了一个支付相关的项目,项目工作中,需要建立一个模拟支付宝的网关,主要是接收请求并返回数据.作为一名没有丝毫开发经验的菜鸡,初期入门相当费劲,主要还是思维上的转变. ...
随机推荐
- win10环境下安装Ubantu双系统(超详解)
win10环境下安装Ubantu双系统 1.准备工作: 先去ubantu官网(https://www.ubuntu.com/download)去下载ubantu镜像.根据自己的实际情况选择32位的或者 ...
- :适配器模式:Adapter
#ifndef __ADAPTER_H__ #define __ADAPTER_H__ #include <iostream> using namespace std; class Duc ...
- 自动化创建tornado项目
tornado目录结构: index.py 入口文件 app app目录 |___ __init__.py 初始化脚本 |___ templates 模板目录 | |___ index ...
- 特殊权限stick_bit
stick_bit 防删除位:文件是否可以被某用户删除,主要取决于该文件所在的目录是否对该用户具有写权限.如果没有写权限,则这个目录下的所有文件都不能删除,同时也不能添加新的文件.如果希望用户能够添加 ...
- SharePoint Framework 企业向导(四)
博客地址:http://blog.csdn.net/FoxDave 接上一讲 嵌入JavaScript脚本 开发者常常使用的比较受欢迎的开发方式是嵌入JavaScript脚本,也叫JavaScri ...
- Vue中 v-html 与 v-text 的区别
解析的效果:
- springmvc跳转到自定义404页面的三种方法
有时候我们并不想跳转到系统自定义的错误页面中,那么我们需要自定义页面并且实现它的跳转 有三种方法可以实现 方法一:最简单的实现,也是最快的 在<web-app>节点下配置 代码如下: &l ...
- Shiro自定义Realm时用注解的方式注入父类的credentialsMatcher
用Shiro做登录权限控制时,密码加密是自定义的. 数据库的密码通过散列获取,如下,算法为:md5,盐为一个随机数字,散列迭代次数为3次,最终将salt与散列后的密码保存到数据库内,第二次登录时将登录 ...
- 几种常见数据库的driverClassName和url
DB2: driverClassName:com.ibm.db2.jcc.DB2Driver url:jdbc:db2://localhost:50000/sample Oracle: driverC ...
- SpringBatch Sample (四)(固定长格式文件读写)
前篇关于Spring Batch的文章,讲述了Spring Batch 对XML文件的读写操作. 本文将通过一个完整的实例,与大家一起讨论运用Spring Batch对固定长格式文件的读写操作.实例延 ...