第一步我是用户 现在 浏览器上输入地址 ---》 发送给服务   来请求返回当前的页面

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

第三步 服务端去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 基础总结 汇总 从请求到返回页面的过程,的更多相关文章

  1. day 7 - 1 集合、copy及基础数据类型汇总

    集合:{},可变的数据类型,他里面的元素必须是不可变的数据类型,无序,不重复.(不重要)集合的书写 set1 = set({1,2,3}) #set2 = {1,2,3,[2,3],{'name':' ...

  2. 沉淀,再出发:Java基础知识汇总

    沉淀,再出发:Java基础知识汇总 一.前言 不管走得多远,基础知识是最重要的,这些知识就是建造一座座高楼大厦的基石和钢筋水泥.对于Java这门包含了编程方方面面的语言,有着太多的基础知识了,从最初的 ...

  3. jquery基础知识汇总

    jquery基础知识汇总 一.简介 定义 jQuery创始人是美国John Resig,是优秀的Javascript框架: jQuery是一个轻量级.快速简洁的javaScript库.源码戳这 jQu ...

  4. 多个网络请求成功返回再执行另外任务的思路分析(iOS)

    前言 今天我们来讨论一个经常出现的需求场景,也是一个老话题.在开发中我们往往会遇到需要进行多个网络请求,并且需要多个网络请求成功返回后再做其他事的场景.比如同一个界面显示的内容需要用到两个网络接口,而 ...

  5. laravel基础课程---6、请求(如何获取当前 HTTP 请求的实例)

    laravel基础课程---6.请求(如何获取当前 HTTP 请求的实例) 一.总结 一句话总结: 依赖注入:通过依赖注入的方式来获取当前 HTTP 请求的实例:public function sto ...

  6. 你所不知道的库存超限做法 服务器一般达到多少qps比较好[转] JAVA格物致知基础篇:你所不知道的返回码 深入了解EntityFramework Core 2.1延迟加载(Lazy Loading) EntityFramework 6.x和EntityFramework Core关系映射中导航属性必须是public? 藏在正则表达式里的陷阱 两道面试题,带你解析Java类加载机制

    你所不知道的库存超限做法 在互联网企业中,限购的做法,多种多样,有的别出心裁,有的因循守旧,但是种种做法皆想达到的目的,无外乎几种,商品卖的完,系统抗的住,库存不超限.虽然短短数语,却有着说不完,道不 ...

  7. Python的Django REST框架中的序列化及请求和返回

    Python的Django REST框架中的序列化及请求和返回 序列化Serialization 1. 设置一个新的环境 在我们开始之前, 我们首先使用virtualenv要创建一个新的虚拟环境,以使 ...

  8. ORACLE| ORACLE基础语法汇总

    创 ORACLE| ORACLE基础语法汇总 2018-07-18 16:47:34 YvesHe 阅读数 9141更多 分类专栏: [数据库]   版权声明:本文为博主原创文章,遵循CC 4.0 B ...

  9. 基于jFinal建立简单的服务端-接收请求并返回指定内容

    本菜鸡是一名弱弱的测试工程师,最近完成了一个支付相关的项目,项目工作中,需要建立一个模拟支付宝的网关,主要是接收请求并返回数据.作为一名没有丝毫开发经验的菜鸡,初期入门相当费劲,主要还是思维上的转变. ...

随机推荐

  1. Map中根据条件删除元素

    今天在写程序过程中,需要根据判断条件删除一个Map中的相应数据,我自然而然想到可以通过调用Map中的remove(Object key)函数进行删除:代码如下: public Map<Doubl ...

  2. Огонек--灯光--IPA--俄语

    苏联老歌总让人沉浸其中.

  3. node连接myslq

    var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : ' ...

  4. js重写trim()方法

    最近项目中出现去空格的需求,我本地是IE11,使用trim()函数的时候,是无法识别的.因此重写String的trim()方法. 1.要求 可以去除首位全角,半角空格. 2.对   能去除所有 Str ...

  5. linux下关于PCL(point cloud library)库的安装,三行命令错误的问题

    最近想再看看PCL,所以进行了安装,在之前的接触的过程中,由于之前的网络存在问题,导致以下三个命令: sudo add-apt-repository ppa:v-launchpad-jochen-sp ...

  6. 5-log4j2.xml配置文件各个节点详解

    具体配置参考官网:http://logging.apache.org/log4j/2.x/manual/configuration.html 一.log.xml文件的大致结构 <?xml ver ...

  7. python day10作业

  8. IDEA发布应用时发布到lib下面的包不全

    IDEA发布应用时发布到lib下面的包不全,Tomcate启动时就报:At least one JAR was scanned for TLDs yet contained no TLDs. Enab ...

  9. PAT乙级 1016. 部分A+B (15)

    题目传送:https://www.patest.cn/contests/pat-b-practise/1016 正整数A的“DA(为1位整数)部分”定义为由A中所有DA组成的新整数PA.例如:给定A ...

  10. 设计精美Power BI报告的五大秘诀

    众所周知,Power BI可以帮助您创建交互式且信息丰富的报告,但使用Power BI 制作精美而实用的报告对我们这群IT人员而言,却是一个巨大的痛苦:但个人觉得不能就此止步,通过不断实践练习,小悦采 ...