Django中的get、getlist方法
HttpRequest对象的属性GET、POST都是QueryDict类型的对象
与python字典不同,QueryDict类型的对象用来处理同一个键带有多个值的情况
get(‘键’):如果一个键有多个值,会获取最后一个值,获取不到返回None
get(‘键’, 默认值):获取不到返回默认值
getlist(‘键’):获取这个键对应的所有值,返回一个列表,获取不到返回 [],
getlist(‘键’, 默认值):获取不到返回默认值
一:请求行内参数的获取
1–url-获取未命名参数–顺序传参
例:
127.0.0.1:8000/users/demo/北京/2018
url(r'^weather/([a-z]+)/(\d{4})/$', views.weather),
def weather(request, city, year):
# 参数的顺序必须和路由一致
print('city=%s' % city) # 北京
print('year=%s' % year) # 2018
return HttpResponse('OK')
2–url-获取命名参数–位置传参
例:
127.0.0.1:8000/users/demo/北京/2018
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) # 2018
return HttpResponse('OK')
3–url-获取查询参数(string)–无论是GET还是POST,都可以获取到url中的查询参数
例:
127.0.0.1:8000/users/demo?a=1&b=2&a=3
def demo(request):
a = request.GET.get('a') # 3 获取键a的最后一个值
a_list = request.GET.getlist('a') # [1, 3] 获取键a的所有值
return HttpResponse('OK')
二:请求头内参数的获取
可以通过request.META属性获取请求头headers中的数据,request.META为字典类型。
常见的请求头如:
CONTENT_LENGTH – The length of the request body (as a string).
CONTENT_TYPE – The MIME type of the request body. HTTP_ACCEPT –
Acceptable content types for the response. HTTP_ACCEPT_ENCODING –
Acceptable encodings for the response. HTTP_ACCEPT_LANGUAGE –
Acceptable languages for the response. HTTP_HOST – The HTTP Host
header sent by the client. HTTP_REFERER – The referring page, if any.
HTTP_USER_AGENT – The client’s user-agent string. QUERY_STRING – The
query string, as a single (unparsed) string. REMOTE_ADDR – The IP
address of the client. REMOTE_HOST – The hostname of the client.
REMOTE_USER – The user authenticated by the Web server, if any.
REQUEST_METHOD – A string such as “GET” or “POST”. SERVER_NAME – The
hostname of the server. SERVER_PORT – The port of the server (as a
string).
具体使用如:
def get_headers(request):
print(request.META['CONTENT_TYPE'])
return HttpResponse('OK')
三:请求体内参数的获取
1–form表单数据的获取
通过request.POST获取——(get、getlist方法)
2–非form表单数据的获取
import json
def get_body_json(request):
json_str = request.body # 取出的是字节
json_str = json_str.decode() # 字节解码为字符串 python3.6 无需执行此步
req_data = json.loads(json_str) # 字符串转换为字典
print(req_data['a']) # 取出具体键的值
print(req_data['b'])
return HttpResponse('OK')
四:其他常用HttpRequest对象属性
method:一个字符串,表示请求使用的HTTP方法,常用值包括:‘GET’、‘POST’。
user:请求的用户对象。
path:一个字符串,表示请求的页面的完整路径,不包含域名和参数部分。 encoding:一个字符串,表示提交的数据的编码方式。
如果为None则表示使用浏览器的默认设置,一般为utf-8。
这个属性是可写的,可以通过修改它来修改访问表单数据使用的编码,接下来对属性的任何访问将使用新的encoding值。
FILES:一个类似于字典的对象,包含所有的上传文件。