常用HttpRequest对象属性

HttpRequest对象

服务器接收http请求后会根据报文创建一个HttpRequest对象
GET:包含get请求的所有参数
POST:包含post请求的所有参数
path:请求的完整路径,不包括域名和端口
method:表示请求的方式
encoding :浏览器提交数据的编码方式
FILES:包含上传的文件
COOKIES:包含所有的cookies
session:表示当前会话

diango中一键多值获取

HttpRequest对象的属性GET、POST都是QueryDict类型的对象
QueryDict类型的对象用来处理同一个键带有多个值的情况


 get 根据键获取值,如果一个键有多个值默认获取最后一个值。键不存在返回None。
 getlist 根据键获取值,值以列表形势返回,可以获取指定键的所有值。键不存在返回空列表。

url路径参数获取—正则

/weather/beijing/2018
定义路由时,可以使用正则表达式提取参数的方法从url路径中获取参数,django会将提取的参数直接传递到视图的传入参数中

  • 未命名参数按定义顺序传递,如
url(r'^weather/([a-z]+)/(\d{4})/$',views.weather)
def weather(request,city,year):
    ptint('city=%s'%city)
    print('year=%s'%year)
    return httpresponse('ok')
  • 命名参数按名字传递,如
url(r'^weather/(?<city>[a-z]+)/(?\d{4})/$'.views.weather)
def weather(request,year,city):
    ptint('city=%s'%city)
    print('year=%s'%year)
    return HttpResponse('OK')

请求路径中的查询字符串参数(?k1=v1&k2=v2)

https://www.baidu.com/s?wd=百度
请求路径中的查询字符串参数,可以通过requees.GET属性获取,返回QueryDict对象
查询字符串不区分请求方式,客户端进行POST方式的请求,依然可以通过request.GET获取请求中的查询字符串数据。
def requests_test(request):
    a=request.GET.get('username')
    return HttpResponse('OK')

请求体数据获取

可以发送请求体数据的请求方式POST,PUT,DELETE,PATCH

表单类型 Form Data

表单类型的请求体数据,可以通过request.POST属性获取,返回QueryDict对象。
def requests_test(request):
    a=request.POST.get('username')
    return HttpResponse('OK')

非表单类型 Non-Form Data

非表单类型,Django无法自动解析,可通过request.body属性获取最原始的请求体数据,再按照请求体格式(json,xml等)进行解析。
request.body 返回bytes类型数据。然后序列化为需要的数据。

json_str = request.body
# json_str = json_str.decode()  # python3.6 无需执行此步
req_data = json.loads(json_str)

请求头

获取请求头中的数据通过request.META属性获取,request.META为字典类型。

参数:
CONTENT_LENGTH–请求正文的长度(以字符串形式)。

CONTENT_TYPE–请求正文的MIME类型。

HTTP_ACCEPT–响应的可接受内容类型。

HTTP_ACCEPT_ENCODING–响应的可接受编码。

HTTP_ACCEPT_LANGUAGE–响应的可接受语言。

HTTP主机–客户端发送的HTTP主机头。

HTTP_REFERER–引用页面(如果有)。

HTTP_USER_AGENT–客户端的用户代理字符串。

QUERY_STRING–查询字符串,作为单个(未分析)字符串。

REMOTE_ADDR–客户端的IP地址。

REMOTE_HOST –客户端的主机名。

REMOTE_USER –由Web服务器验证的用户(如果有)。

REQUEST_METHOD-例如“POST”或“GET”方法。

SERVER_NAME–服务器的主机名。

SERVER_PORT–服务器的端口(以字符串形式)。