django的Request-7
利用HTTP协议向服务器传参有以下几种方式
- 从url中截取
- 使用查询字符串
- 在请求体中发送数据
- 在http报文头
header
中发送数据
1. 从url中获取截取
在定义路由规则的时候,可以使用正则表达式截取数据,然后传到视图函数中,在视图函数中使用参数接收。
例:
浏览器向后端发送了一个请求,url为 /weather/beijing/20171001
- 未命名参数
路由
url(r'^weather/([a-z]+)/(\d{8})$', views.weather, name="weather")
def weather(request, city, date):
content = city+date
return HttpResponse(content)
视图函数要使用位置参数接收,位置要对应,响应结果 beijing20171001
- 命名参数
url(r'^demo/', include("demo.urls", namespace="demo"))
def weather(request, date, city):
content = city+date
return HttpResponse(content)
可以使用正则表达式给参数命名,参数接收的时候位置不需要照应,响应结果 beijing20171001
- 从url中截取参数不区分 get post请求方式。
2. QueryDict
在django的 HttpRequest
对象中,属性 GET
和 POST
得到的都是 django.http.QueryDict
所创建的实例,这是django自定义的一个类似字典的类。
在Python的字典中,一个键只能有一个值,当一个键赋值多次的时候,只会保留最后一个值。而在 HttpRequest
对象中,一个键往往有多个值。而 QueryDict
就可以用来处理一个键带多个值的情况。
(1). QueryDict.get(key, [default])
QueryDict.get(key, [default])
返回 key 的值。如果key 具有多个值,只返回最后(最新)的值。当key 不存在时返回一个默认值。
(2). QueryDict.getlist(key, [default])
QueryDict.getlist(key, [default])
返回 key 的值。如果key 具有多个值,以列表形式返回 key 的所有值。当key 不存在时返回一个空列表,设置了默认值则返回默认值。
3. 查询字符串
在url中格式如 ?a=1&b=2
的字符串叫做查询字符串,可以用过 request.GET
获取, request.GET
返回值是 QueryDict
对象。
url
/query?a=1&b=2&b=3
路由
url(r'^query', views.query, name="query")
视图函数
def query(request):
query_dict = request.GET
a = query_dict.get('a')
b = query_dict.getlist('b')
context = "a=%s,b=%s" % (a, b)
return HttpResponse(context)
响应结果
a=1,b=['2', '3']
- 查询字符串不区分 get post 请求方式。
4. 请求体
请求体获得参数的各种有多种,例如 表单,json,xml...不同格式的数据要区别对待
可以发送请求体数据的请求方式有POST、PUT、PATCH、DELETE。
django默认开启了csrf防护,会对上述的请求方式做验证,测试时可以关闭验证。
打开项目的配置文件 settings.py
注释掉 scrf中间件
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
4.1 Form表单
前端发送的表单类型的数据,可以使用 request.POST
获取, request.POST
返回值是 QueryDict
对象。
url:
demo/form
路由
url(r'^form', views.form, name="form")
表单数据
视图函数
def form(request):
form_data = request.POST
name = form_data.get("name")
age = form_data.get("age")
context = "name=%s,age=%s" % (name, age)
return HttpResponse(context)
响应结果
name=xuanli,age=18
4.2 非表单类型
非表单类型的数据django无法自动解析,需要通过 request.body
获取原始的请求体数据,然后自己根据数据类型解析。 request.body
返回值是 bytes
对象。
例如前端请求的是json数据:
url
demo/json
路由
url(r'^json', views.get_json, name="json")
json数据
{"name": "xuanli", "age": "18"}
视图函数
def get_json(request):
json_data = request.body
json_data = json_data.decode()
req_data = json.loads(json_data)
name = req_data.get("name")
age = req_data.get("age")
context = "name=%s,age=%s" % (name, age)
return HttpResponse(context)
响应结果
name=xuanli,age=18
- python3.6不需要使用
decode()
解码
请求头
其他
django的Request-7的更多相关文章
- django 使用 request 获取浏览器发送的参数
django 使用 request 获取浏览器发送的参数 转载请注明出处 https://blog.csdn.net/fanlei5458/article/details/80638348 获 ...
- django的request对象和response对象
概述Django 使用 request 和 response 对象表示系统状态数据..当请求一个页面时,Django创建一个 HttpRequest 对象.该对象包含 request 的元数据. 然后 ...
- Python学习---Django的request扩展[获取用户设备信息]
关于Django的request扩展[获取用户设备信息] settings.py INSTALLED_APPS = [ ... 'app01', # 注册app ] STATICFILES_DIRS ...
- django 修改 request 对象中的请求参数, 并重新赋值给 request 对象
直接上代码, 实现流程看代码及注释 def your_view(self, request): method = request.method if method == "GET" ...
- django中request对象详解(转载)
django中的request对象详解 Request 我们知道当URLconf文件匹配到用户输入的路径后,会调用对应的view函数,并将 HttpRequest对象 作为第一个参数传入该函数. ...
- 【Django】django 的request和response(转)
当请求一个页面时,Django 把请求的 metadata 数据包装成一个 HttpRequest 对象,然后 Django 加载合适的 view 方法,把这个 HttpRequest 对象作为第一个 ...
- 【Django】django 处理request流程细节(转)
首先发生的是一些和 Django 有关(前期准备)的其他事情,分别是: 如果是 Apache/mod_python 提供服务,request 由 mod_python 创建的 django.core. ...
- 【Django】request 处理流程(转)
Django 和其他 Web 框架的 HTTP 处理的流程大致相同,Django 处理一个 Request 的过程是首先通过中间件,然后再通过默认的 URL 方式进行的.我们可以在 Middlewar ...
- Django将request对象传入模板配置
对于很多时候,需要从模板中获取很请求中很多内容,比如当前请求的url,当前的session变量中的某个值,这时候我们可以通过配置可将request对象传递进模板. django1.10版本: sett ...
- django的request介绍和APIView流程分析和CBV的流程分析
首先get请求的数据都在request.GET中,request.body中没有,因为只有post请求有请求体,request.body中的数据是请求体的数据 首先,我们还是用cbv的方式来讲解 我们 ...
随机推荐
- windows常用快捷命令
打开控制面板 control.exe 1.操作中心 wscui.cpl 2.Windows防火墙 Firewall.cpl 3.设备管理器 hdwwiz.cpl 4.Internet属性 inetcp ...
- 一、WPF 2个datagrid之间同步进度条
页面代码 <Grid DockPanel.Dock="Left" Width="400"> <DataGrid Name="dgSo ...
- 【Leetcode】【Medium】Multiply Strings
Given two numbers represented as strings, return multiplication of the numbers as a string. Note: Th ...
- /usr/lib64/python2.6/site-packages/cryptography/__init__.py:26: DeprecationWarning: Python 2.6 is no longer supported by the Python core team
升级python2.6到2.7后,执行ansible后一直显示警告,如标题所示. 因为安装ansible,使用的是yum的方式,而yum使用的是python2.6,所以ansible安装环境为pyth ...
- Struts2学习-Ioc学习
网址:http://blog.csdn.net/qq_22654611/article/details/52606960可以在这个网址学学. 1.新建空项目,然后建立Java EE,在把Java EE ...
- oracle 函数 WMSYS.WM_CONCAT 与对应 mysql 函数GROUP_CONCAT的用法
1.oracle函数 WMSYS.WM_CONCAT的使用 如图,将图1的结果变成图2的结果,使用函数 WMSYS.WM_CONCAT 即可. 查询语句需要配合使用group by select aa ...
- 可用的rtmp卫视直播地址
http://blog.csdn.net/chinabinlang/article/details/45092297[ 可用的rtmp卫视直播地址] http://blog.csdn.net/chin ...
- Perl入门(七) Perl脚本的调试
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/sunshoupo211/article/details/32711165 编程中错误不可避免.调试可 ...
- 学会WCF之试错法——客户端调用基础
1当客户端调用未返回结果时,服务不可用(网络连接中断,服务关闭,服务崩溃等) 客户端抛出异常 异常类型:CommunicationException InnerException: Message: ...
- 理解JavaScript的this对象
1.概述 this对象是在运行时基于函数的执行环境绑定的,this总是返回一个对象,简单说,就是返回属性或方法"当前"所在的对象.在全局函数中,this等于window,而当函数作 ...