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

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

第三步 服务端去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. JavaScript操作BOM对象

    1)windows对象 浏览器对象模型(BOM :Browser  Object  Model)是JavaScript的组成之一,它提供了独立于内容与浏览 器窗口进行交互的对象,使用浏览器对象模型可以 ...

  2. getchar getche getch的区别

    getchar 由宏实现:#define getchar() getc(stdin). getchar有一个int型的返回值.当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘 ...

  3. vivado对task和function的可综合支持

    手册UG901,对vivado可综合的语句支持进行了描述,HDL包括:verilog-2001,system-verilog,VHDL: verilog-2001扩展了对task和function的支 ...

  4. Android开发 ---如何操作资源目录中的资源文件5 ---Raw资源管理与国际化

    效果图: 1.activity_main.xml 描述: 定义两个按钮,一个是Raw资源管理,一个是处理国际化语言,其中i18n表示简体中文 <?xml version="1.0&qu ...

  5. L299 EST 科技英语翻译-美学取向 (下)

    4. Ordering(有序美) DescriptiveExpositoryArgumentative Chinese: end focus 句尾焦点English: beginning focus ...

  6. day73 母版 中间件

    关于母版自定义的问题 模板引擎: 基本实用{{k1}}  if  for  在页面传参数 并判断  通过母版进行交互 一 模板中自定义函数:操作步骤 1在已经注册的App中创建一个名字叫templat ...

  7. [JetBrains注册] 利用教育邮箱注册JetBrains产品(pycharm、idea等)的方法

    我们在使用JetBrains的一些产品时,大多使用网上的一些key去注册或者pojie的,但是由于提供这些key的服务器并不能保证稳定可用,所以可能一段时间我们使用的ide又需要重新pojie. 这里 ...

  8. Spring Boot 揭秘与实战(八) 发布与部署 - 开发热部署

    文章目录 1. spring-boot-devtools 实现热部署 2. Spring Loaded 实现热部署 3. 模板文件热部署 4. 源代码 Spring Boot 支持页面与类文件的热部署 ...

  9. weex--手机调试

    Weex Playground 我的是小米应用市场,没有搜索到,不过这是官方的二维码,我是扫描这个二维码下载的.

  10. Fizz Buzz 问题

    要求: 给你一个整数n. 从 1 到 n 按照下面的规则打印每个数: 如果这个数被3整除,打印fizz. 如果这个数被5整除,打印buzz. 如果这个数能同时被3和5整除,打印fizz buzz. 示 ...