Django中请求参数的获取

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:一个类似于字典的对象,包含所有的上传文件。

猜你喜欢

转载自blog.csdn.net/weixin_42820697/article/details/83867124