颤栗汪洋,兴仁县事业单位招考,单身初恋日记
目录
利用http协议向服务器传参有以下几种方式
header
中发送数据在定义路由规则的时候,可以使用正则表达式截取数据,然后传到视图函数中,在视图函数中使用参数接收。
例:
浏览器向后端发送了一个请求,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
在django的 httprequest
对象中,属性 get
和 post
得到的都是 django.http.querydict
所创建的实例,这是django自定义的一个类似字典的类。
在python的字典中,一个键只能有一个值,当一个键赋值多次的时候,只会保留最后一个值。而在 httprequest
对象中,一个键往往有多个值。而 querydict
就可以用来处理一个键带多个值的情况。
querydict.get(key, [default])
返回 key 的值。如果key 具有多个值,只返回最后(最新)的值。当key 不存在时返回一个默认值。
querydict.getlist(key, [default])
返回 key 的值。如果key 具有多个值,以列表形式返回 key 的所有值。当key 不存在时返回一个空列表,设置了默认值则返回默认值。
在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']
请求体获得参数的各种有多种,例如 表单,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', ]
前端发送的表单类型的数据,可以使用 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
非表单类型的数据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
decode()
解码
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
新手学习Python2和Python3中print不同的用法
Python基于os.environ从windows获取环境变量
网友评论