03_Django-GET请求和POST请求-设计模式及模板层
03_Django-GET请求和POST请求-设计模式及模板层
视频:https://www.bilibili.com/video/BV1vK4y1o7jH
博客:https://blog.csdn.net/cpen_web
一. GET请求和POST请求
定义
·无论是GET还是POST,统一都由
视图函数接收请求,通过判断request.method区分具体的请求动作·样例:
if requests.method == 'GET':
处理GET请求时的业务逻辑
elif requests.method == 'POST':
处理POST请求的业务逻辑
else:
其他请求业务逻辑
------------------------------------------------------------------
演示 <项目同名文件夹下>/views.py
def test_get_post(request):
if request.method == 'GET':
pass
elif request.method == 'POST':
#处理用户提交数据
pass
else:
pass
return HttpResponse('--test get post is ok--')
GET处理
·GET请求动作,一般用于向服务器
获取数据·能够产生GET请求的场景:
- 浏览器地址栏中输入URL,回车后
- <
a href="地址?参数=值&参数=值"> -
form表单中的method为get------------------------------------------------------------------
GET请求方式中,如果有数据需要传递给服务器,通常会用
查询字符串(Query String)传递【注意:不要传递敏感数据】URL格式:xxx
?参数名1=值1&参数名2=值2...- 如:http://127.0.0.1:8000/page1
?a=100&b=200服务器端接收参数
获取客户端请求GET请求提交的数据
·方法示例:
request.GET['参数名'] # QueryDict
request.GET.get('参数名', '默认值')
request.GET.getlist('参数名')
# mypage?a=100&b=200&c=300&b=400
# request.GET=QueryDict({'a': ['100'], 'b': ['200', '400'], 'c': ['300']})
# a = request.GET['a']
# b = request.GET['b'] # Error
------------------------------------------------------------------
演示 http://127.0.0.1:8000/test_get_post?a=400
--test get post is ok--
终端
<QueryDict: {'a': ['400', '200', '100']}>
100
['400', '200', '100']
no c <项目同名文件夹下>/urls.py
urlpatterns = [
...
path('test_get_post', views.test_get_post)
] <项目同名文件夹下>/views.py
def test_get_post(request):
if request.method == 'GET':
print(request.GET)
print(request.GET['a'])
# 问卷调查 = form get 兴趣爱好 - 复选框
print(request.GET.getlist('a'))
print(request.GET.get('c', 'no c'))
elif request.method == 'POST':
#处理用户提交数据
pass
else:
pass
return HttpResponse('--test get post is ok--')
------------------------------------------------------------------
·思考:之前的计算器功能,能否拿查询字符串做?
POST处理
·POST请求动作,一般用于
向服务器提交大量/隐私数据·客户端通过表单等POST请求将数据传递给服务器端,如:
·服务器端
接收参数 通过request.method来判断是否为POST请求,如:
if request.method == 'POST':
处理POST请求的数据并响应
else:
处理非POST请求的响应
------------------------------------------------------------------
使用post方式接收客户端数据
request.POST['参数名'] # request.POST 绑定QueryDict
request.POST.get('参数名', '')
request.POST.getlist('参数名')
取消csrf验证,否则Django将会拒绝客户端发来的POST请求,报403响应------------------------------------------------------------------
取消csrf验证
- 禁止掉settings.py中MIDDLEWARE中的CsrfviewsMiddleWare的中间件
MIDDLEWARE = [
...
# 'django.middleware.csrf.CsrfViewMiddleware',
...
]
------------------------------------------------------------------
演示
http://127.0.0.1:8000/test_get_post
post is ok
终端
uname is cpen <项目同名文件夹下>/urls.py
urlpatterns = [
...
path('test_get_post', views.test_get_post)
] <项目同名文件夹下>/views.py
POST_FORM = '''
<form method='post' action='/test_get_post'>
用户名: <input type='text' name='uname'>
<input type='submit' value='提交'>
</form>
'''
def test_get_post(request):
if request.method == 'GET':
return HttpResponse(POST_FORM)
...
---------------------------------------------------------------------------------------------------------------------------------
小节
·Django处理GET请求
查询字符串 - 少量数据传递
·Django处理POST请求
专用于浏览器提交数据
二. Django的设计模式及模板层
MVC和MTV
传统的MVC
MVC代表
Model-View-Controller(模型-视图-控制器)模式。
M模型层(Model),主要用于对数据库层的封装
V视图层(View),用于向用户展示结果(WHAT + HOW)
C控制(Controller),用于处理请求、获取数据、返回结果(重要)作用:
降低模块间的耦合度(解耦)
Django的MTV模式
MTV代表
Model-Template-View(模型-模板-视图)模式。
M模型层(Model)负责与数据库交互
T模板层(Template)负责呈现内容到浏览器(HOW)
V视图层(View)是核心,负责接收请求、获取数据、返回结果(WHAT)作用:
降低模块间的耦合度(解耦)
---------------------------------------------------------------------------------------------------------------------------------
模板层
什么是模板
1、模板是可以根据
字典数据动态变化的html网页2、模板可以
根据视图中传递的字典数据动态生成相应的HTML网页
模板配置
创建模板文件夹
<项目名>/templates在
settings.py中TEMPLATES配置项 1.BACKEND:指定模板的引擎
2.
DIRS:模板的搜索目录(可以是一个或多个) 3.APP_DIRS:是否要在应用中的templates文件夹中搜索模板文件
4.OPTIONS:有关模板的选项
·配置项中 需要修改部分
设置DIRS -
'DIRS': [os.path.join(BASE_DIR, 'templates')],------------------------------------------------------------------
演示
<项目同名文件夹下>/settings.py
TEMPLATES = [
{
...
'DIRS': [os.path.join(BASE_DIR, 'templates')],
...
模板的加载方式
方案1 - 通过loader获取模板,通过HttpResponse进行响应(特点:麻烦)
在视图函数中:
from django.template import loader
# 1.通过 loader 加载模板
t = loader.get_template("模板文件名")
# 2.将 t 转换成 HTML 字符串
html = t.reader(字典数据)
# 3.用响应对象将转换的字符串内容返回给浏览器
return HttpResponse(html)
--------------------------------------------------------------------------------------
演示
http://127.0.0.1:8000/test_html
<项目同名文件夹下>/urls.py
urlpatterns = [
...
path('test_html', views.test_html)
] <项目同名文件夹下>/views.py
def test_html(request):
from django.template import loader
t = loader.get_template('test_html.html')
html = t.render()
return HttpResponse(html) <项目文件夹下>/templates/test_html.html
<h3>我是模板层的~~~~</h3>
---------------------------------------------------------------------------------------------------------------------------------
方案2 - 通过render() 直接加载并响应模板(特点:方便,大量使用这种)
在视图函数中:
from django.shortcuts import render
return render(request, '模板文件名', 字典数据)
--------------------------------------------------------------------------------------
演示
http://127.0.0.1:8000/test_html
<项目同名文件夹下>/views.py
def test_html(request):
# 方案2
from django.shortcuts import render
return render(request, 'test_html.html')
视图层与模板层之间的交互
1、视图函数中可以将Python
变量封装到字典中传递到模板样例:
def xxx_view(request):
dic = {
"变量1": "值1",
"变量2": "值2",
}
return render(request, 'xxx.html',dic)2、模板中,我们可以用 {{ 变量名 }} 的语法 调用视图传进来的变量
--------------------------------------------------------------------------------------
演示
http://127.0.0.1:8000/test_html
<项目同名文件夹下>/urls.py
urlpatterns = [
...
path('test_html', views.test_html)
] <项目同名文件夹下>/views.py
def test_html(request):
from django.shortcuts import render
dic = {'username': 'peng', 'age': 23}
return render(request, 'test_html.html', dic) <项目文件夹下>/templates/test_html.html
<h3>{{ username }}是模板层的~~~~</h3>
03_Django-GET请求和POST请求-设计模式及模板层的更多相关文章
- Ajax中get请求和post请求
我们在使用Ajax向服务器发送数据时,可以采用Get方式请求服务器,也可以使用Post方式请求服务器,那么什么时候该采用Get方式,什么时候该采用Post方式呢? Get请求和Post请求的区别: 1 ...
- slave IO流程之二:注册slave请求和dump请求
slave IO流程已经在http://www.cnblogs.com/onlyac/p/5815566.html中有介绍 这次我们要探索注册slave请求和dump请求的报文格式和主要流程. 一.注 ...
- loadrunner录制脚本如何选择使用get请求和post请求的方式
在loadrunner工具里录制脚本时常常会用到get请求和post请求,有关loadrunner常用的这两类的请求主要有: get请求: web_url 和 web_link post请求: web ...
- iOS开发网络篇—GET请求和POST请求
iOS开发网络篇—GET请求和POST请求 一.GET请求和POST请求简单说明 创建GET请求 // 1.设置请求路径 NSString *urlStr=[NSString stringWithFo ...
- 普通请求和ajax请求的区别
普通请求和ajax请求的区别? 下面的action返回一个json文件,文件内容为sts.*,data1
- iOS开发网络篇—GET请求和POST请求(转)
一.GET请求和POST请求简单说明 创建GET请求 1 // 1.设置请求路径 2 NSString *urlStr=[NSString stringWithFormat:@"http:/ ...
- GET请求和POST请求的区别
request获取请求参数 最为常见的客户端传递参数方式有两种: 浏览器地址栏直接输入:一定是GET请求: 超链接:一定是GET请求: 表单:可以是GET,也可以是POST,这取决与<form& ...
- 使用SoapUI工具做get请求和post请求接口测试
祝大家节日快乐啦. 之前写过的一篇帖子已经介绍了SoapUI工具的基本使用,所以在此不再重复讲解关于建工程.建测试套件.添加用例等操作,可查看该篇文章详解:http://www.cnblogs.com ...
- Ajax相关——get请求和post请求的区别
一.完整的URL由以下几部分组成: scheme:通信协议,常用的有:http/ftp. host:主机,服务器(计算机)域名或IP地址 port:端口,整数,可选,省略时使用默认端口,http的默认 ...
随机推荐
- Vue引入vuetify框架你需要知道的几点
1.命令行安装 npm install vuetify --save 2.在src目录中创建一个名为的文件夹plugins在里面,添加一个vuetify.js文件.代码如下 import Vue fr ...
- js 表面学习 - 认识结构2
单行注释以 // 开头. 多行注释以 /* 开头,以 */ 结尾. 任何位于 /* 和 */ 之间的文本都会被 JavaScript 忽略. JavaScript 数据类型 JavaScript 变量 ...
- Python爬取某短视频热点
写在前面的一些话: 随着短视频的大火,不仅可以给人们带来娱乐,还有热点新闻时事以及各种知识,刷短视频也逐渐成为了日常生活的一部分.本文以一个简单的小例子,简述如何通过Pyhton依托Selenium来 ...
- Tapdata x 轻流,为用户打造实时接入轻流的数据高速通道
在全行业加速布局数字化的当口,如何善用工具,也是为转型升级添薪助力的关键一步. 那么当轻量的异构数据实时同步工具,遇上轻量的数字化管理工具,将会收获什么样的新体验?此番 Tapdata 与轻流 ...
- 最著名的著名的比特币BTC钱包地址-中本聪的钱包
最著名的著名的比特币BTC钱包地址-中本聪的钱包1.比特币创始人中本聪 1PTFYUG6nCzRrByoRfGT5kefUNuZjNF84o这个地址还是比特币的创世地址,比特币从未移动过,其中的50币 ...
- 你有没有想过用电子表格也能做MES、WMS、SRM和MRP
曾几何时,小微企业多半选择excel和WPS等电子表格,中小企业更喜欢选择用友金蝶和浪潮这样的国产大品牌软件,而大型企业则偏爱SAP.oracle这样的国外大品牌. 时至今日,风向却变了,品牌软件已不 ...
- Taurus.MVC 如何升级并运行在NET6、NET7
前言: 之前计划帮某公司架构一个从WPF转向Web的低代码的开发平台,并构思为Taurus.MVC 新增微服务的基础功能模块,提供便捷的微服务开发方式,因中途合作中止,代码开发部分后续再上. 最近看到 ...
- Jetpack Compose学习(8)——State及remeber
原文地址: Jetpack Compose学习(8)--State状态及remeber关键字 - Stars-One的杂货小窝 之前我们使用TextField,使用到了两个关键字remember和mu ...
- css基础02
熟练快捷键!方便,要多练! css复合选择器 不会选孙子,有一个儿子和另一个儿子的孩子(也是孙子)同名了,但子选择器子选择儿子,同名的孙子不选.和后代选择器有一点不一样的. " ,&quo ...
- C#爬虫之通过Selenium获取浏览器请求响应结果
前言 在进行某些爬虫任务的时候,我们经常会遇到仅用Http协议难以攻破的情况,比如协议中带有加密参数,破解需要花费大量时间,那这时候就会用Selenium去模拟浏览器进行页面上的元素抓取 大多数情况下 ...








