Django---请求、响应
Django的请求和响应
一、客户端向服务器的请求简介
1.c-->s的传参的4中途径
- 提取的URL的特定部分,如/天气/北京/ 2018,可以在服务器端的路由中用正则表达式截取;
- 查询字符串(查询字符串),形如key1 = value1&key2 = value2;
- 请求体(主体)中发送的数据,比如表单数据,JSON,XML;
- 在HTTP报文的头(报头)中。
2.传参途径的接受方式
1. 通过url地址传递参数
例如:在子路由request_rout中,urls中设置 url(r'^weather/(?P<city>[a-z]+)/(?P<year>\d{4})/$', views.weather),
def weather(request, year, city):
print('city=%s' % city)
print('year=%s' % year)
return HttpResponse('OK')
request_rout/views
2. 通过查询字符串传递参数
# 演示从查询字符串中提取参数
# /query/?a=1&b=2&c=3
# flask: request.args
# dhango: request.GET -> QueryDict类的对象,类似于字典
def query_data(request):
a = request.GET.get('a')
b = request.GET.get('b')
c = request.GET.get('c') c_list = request.GET.getlist('c') # list
print(c_list)
return HttpResponse("OK")
request_rout/views
3. 通过请求体传递数据
3.1post表单提交数据
# 演示获取post表单提交的数据
# /form/
# flask: request.form
# dhango: request.POST -> QueryDict类的对象,类似于字典
def form_data(request):
name = request.POST.get('name')
age = request.POST.get('age')
print(name)
print(age)
return HttpResponse('OK')
request_rout/views
3.2json数据
# 演示获取json数据
# /json/
# flask: request.json
# dhango: request.body -> QueryDict类的对象,类似于字典
def json_data(request):
req_data = request.body # 获取请求体原始数据 bytes # 将bytes转换成str
json_str = req_data.decode() # 将json字符转为字典
req_dict = json.loads(json_str) # 取出年龄和名字
name = req_dict.get('name')
age = req_dict.get('age') print(name)
print(age) return HttpResponse('OK')
request_rout/views
4. 通过请求头传递数据(request.META)
def get_headers(request):
print(request.META['CONTENT_TYPE'])
return HttpResponse('OK')
request_rout/views
CONTENT_LENGTH - 请求正文的长度(作为字符串)。
CONTENT_TYPE - 请求正文的MIME类型。
HTTP_ACCEPT - 响应的可接受内容类型。
HTTP_ACCEPT_ENCODING - 可接受的响应编码。
HTTP_ACCEPT_LANGUAGE - 响应的可接受语言。
HTTP_HOST - 客户端发送的HTTP主机头。
HTTP_REFERER - 引用页面,如果有的话。
HTTP_USER_AGENT - 客户端的用户代理字符串。
QUERY_STRING - 查询字符串,作为单个(未解析的)字符串。
REMOTE_ADDR - 客户端的IP地址。
REMOTE_HOST - 客户端的主机名。
REMOTE_USER - Web服务器验证的用户(如果有)。
REQUEST_METHOD- 一个字符串,如"GET"或"POST"。
SERVER_NAME - 服务器的主机名。
SERVER_PORT - 服务器的端口(作为字符串)。
请求头常见值
3.Django中的QueryDict对象
1.HttpRequest对象的属性GET,POST都是的QueryDict类型的对象,QueryDict类型的对象用来处理同一个键带有多个值的情况

2.得到value值的方法
2.1方法得到():根据键获取值
如果一个键同时拥有多个值将获取最后一个值
如果键不存在则返回无值,可以设置默认值进行后续处理
dict.get('键',默认值) 可简写为 dict['键']
2.2方法的GetList():根据键获取值,值以列表返回,可以获取指定键的所有值
如果键不存在则返回空列表[],可以设置默认值进行后续处理
dict.getlist('键',默认值)
二、响应对象构造
1.返回HttpResponse类的对象或其子类的对象
1.1格式
response = HttpResponse('<响应体>', content_type='<响应数据类型>', status='<响应状态码>')
res_http['name'] = 'yang'
# 演示构造响应对象
# /get_response/
def get_response(request):
res_http = HttpResponse("response_body", content_type='text/html',status=200)
res_http['name'] = 'yang'
return res_http
代码
2.响应时返回json数据
# 演示响应时返回json数据
# /get_json/
# flask: jsonify
# Dhango: JsonResponse(<dict>)
def get_json(request):
res_dict = {
"name" : "yang",
"age" : 12
} return JsonResponse(res_dict)
代码
3.响应时进行页面重定向
# 演示响应时进行页面重定向
# /redirect_test
# flask和django相同
# redirect('url地址')
def redirect_test(request):
# 重定向首页
req_url = reverse('users:index')
print(req_url)
return redirect(req_url)
代码
Django---请求、响应的更多相关文章
- Django请求响应对象
请求与响应对象 HttpRequest HttpRequest存储了客户请求的相关参数和一些查询方法. path 请求页面的全路径,不包括域名-例如, "/hello/". met ...
- DRF对Django请求响应做了技术升级
Django视图是用来处理请求和响应的,Django默认是按Form和Template来设计的,如果要处理以JSON格式为主的RESTful API,那么就需要对Django请求和响应的处理代码进行优 ...
- Django请求,响应,ajax以及CSRF问题
二.request对象常用属性: Attribute Description path 请求页面的全路径,不包括域名端口参数.例如: /users/index method 一个全大写的字符串,表示请 ...
- Django(十一)请求生命周期之响应内容(请求/响应 头/体)
https://www.cnblogs.com/renpingsheng/p/7534897.html Django请求生命周期之响应内容 http提交数据的方式有"post",& ...
- Django请求生命周期之响应内容
Django请求生命周期: 1.发送http请求2.服务器接受,根据请求头中的url在路由关系表中进行匹配(从上到下)3.匹配成功后,执行指定的views函数 URL -> 函数 ==>F ...
- django请求的生命周期
1. 概述 首先我们知道HTTP请求及服务端响应中传输的所有数据都是字符串. 在Django中,当我们访问一个的url时,会通过路由匹配进入相应的html网页中. Django的请求生命周期是指当用户 ...
- python---django请求-响应的生命周期(FBV和CBV含义)
Django请求的生命周期是指:当用户在访问该url路径是,在服务器Django后台都发生了什么. 客户端发送Http请求给服务端,Http请求是一堆字符串,其内容是: 访问:http://crm.o ...
- 第一篇 Flask基础篇之(配置文件,路由系统,模板,请求响应,session&cookie)
Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后 ...
- Django组件 - Django请求生命周期、中间件
一.Django请求生命周期 在学习中间件之前,先了解一下Django的请求生命周期,如下图: 1)client代表浏览器,浏览器内部为我们封装了socket,Django的WSGI模块也封装了soc ...
- 由django请求生命周期延伸出的知识点大总结
django项目搭建见: https://www.cnblogs.com/dongxixi/p/10981577.html django请求生命周期图: 由浏览器发起请求开始 知识点1: 浏览器与服务 ...
随机推荐
- bzoj 3238
后缀数组+单调栈的应用 首先我们研究一下这个表达式,可以发现前半部分与串的情况并没有关系,而只是跟串的长度有关,所以我们先把前半部分算出来: 于是我们只需计算出即可 那么可以发现,对于排名分别为i,j ...
- 页面报错时隐藏Tomcat信息
一.问题描述Tomcat报错页面泄漏Apache Tomcat/8.0.53相关版本号信息,是攻击者攻击的途径之一.因此实际当中建议去掉版本号信息. 二.解决办法1.进入到tomcat/lib目录下, ...
- 解决使用maven的java web项目导入后出现的有关问题 -cannot be read or is not a valid ZIP file
解决使用maven的java web项目导入后出现的有关问题 -cannot be read or is not a valid ZIP file 错误问题:虽然查找repository目录下是有 ...
- Datatables插件1.10.15版本服务器处理模式ajax获取分页数据实例解析
一.问题描述 前端需要使用表格来展示数据,找了一些插件,最后确定使用dataTables组件来做. 后端的分页接口已经写好了,不能修改.接口需要传入页码(pageNumber)和页面显示数据条数(pa ...
- for in和for of的区别(转)
原文链接:https://www.jianshu.com/p/c43f418d6bf0 1 遍历数组通常用for循环 ES5的话也可以使用forEach,ES5具有遍历数组功能的还有map.filte ...
- Jenkins 快速上手指南
步骤: 在服务器上安装好jenkins. 在浏览器地址栏输入:服务器地址+":8080/jenkins",回车访问jenkins主页. 单击“新建”,创建任务.如下图: 为任务命名 ...
- java之微信支付通知
微信支付,是现在大多数平台都需要接入的一个支付方式,没办法,谁让现在的用户都习惯了这种消费方式呢 我今天只说说微信支付通知,我们后台怎么接收通知,并把我们的订单的状态改为已支付, 至于为什么不说支付的 ...
- NOIP2017 d1t2 时间复杂度
题目传送门:洛谷P3952 大模拟不解释 #include<iostream> #include<cstdio> #include<cmath> #include& ...
- 05-BootStrap
今日任务 使用JQuery发送请求局部刷新页面 使用BootStrap制作一个响应式的页面 使用BootStrap制作网站的首页 教学目标 掌握什么是响应式及响应式的原理 掌握BootStrap的栅格 ...
- NumPy数组对象
1.创建NumPy数组 import numpy as np # 创建3*2*4的三维数组 a = np.arange(24).reshape(3, 2, 4) # 打印三维数组的所有元素 print ...