通常HTTP
协议向服务器传参有几种途径
1. 查询字符串(query string), 形如key=value&keys=values
2. URL中的路径部分,如/users/2019,可以在服务器端的路由中用正则表达式截取
3. 请求体(body)中发送的数据, 比如form表单数据、json和xml等
4. http请求头(header)中
查询字符串参数
// 视图函数
def get_query_params(request):
query_dict = request.GET
key = query_dict.get('key')
key_list = query_dict.getlist('keys')
return HttpResponse(f"key={key}key_list={key_list}")
数据类型是 QueryDict,一个类似于字典的对象,包含HTTP
GET
的所有参数。
有相同的键,就把所有的值放到对应的列表里。
取值格式:对象.方法
get()
:返回字符串,如果该键对应有多个值,取出该键的最后一个值
getlist()
:返回列表,取出该键的所有值,为一个列表
请求结果如下图:
URL中的路径
直接通过路径中的正则提取,路由配置如下:提取say/开头a-z未知位数/四位数字
查询字符串不区分请求方式,客户端GET,POST方式的请求,都可以通过request.GET获取请求中的查询字符串数据
urlpatterns = [
# http://127.0.0.1:8000/users/say/guangzhou/2021/
url('^say/([a-z]+)/(\d{4})/$', views.say),
]
视图函数如下:
def say(request, city, year):
return HttpResponse(f"{city} - {year}")
请求结果如下图:
请求体(body)
获取POST表单数据
数据类型是QueryDict,一个类似于字典的对象,包含HTTP POST的所有参数。
常用于form表单,form 表单里的标签 name 属性对应参数的键,value 属性对应参数的值
通过request.POST来获取
取值格式: 对象.方法。
get():
返回字符串,如果该键对应有多个值,取出该键的最后一个值
// 视图函数
def get_form_date(request):
query_dict = request.POST
age = query_dict.get("age")
like = query_dict.getlist('like')
return HttpResponse(f"age={age}\nlike={like}")
请求结果如下图:
获取POST非表单数据
数据类型是二进制字节流,是原生请求体里的参数;
非表单类型的请求体数据, Django无法自动解析, 可以通过request.body属性获取最原始的请求体数据, 自己按照请求体格式(JSON、XML等)进行解析。request.body返回bytes类型;例如:二进制图片、XML、Json 等
// 视图函数
def get_json(request):
json_dict = json.loads(request.body.decode())
return HttpResponse(f"age={json_dict.get('age')}, like={json_dict.get('like')}")
请求结果如下图:
请求头
获取获取http请求头内容,使用request.META.get("header key")来获取;header的key必须大写,如果连接符是横线"-"要改成下划线"_"
// 视图函数
def get_headers(request):
CONTENT_TYPE = request.META["CONTENT_TYPE"]
return HttpResponse(f"CONTENT_TYPE={CONTENT_TYPE}")
请求结果如下图:
提交评论
您尚未登录,登录之后方可评论~ 登录 or 注册