HttpRequest对象
服务器接收http请求后会根据报文创建一个HttpRequest对象
GET:包含get请求的所有参数
POST:包含post请求的所有参数
path:请求的完整路径,不包括域名和端口
method:表示请求的方式
encoding :浏览器提交数据的编码方式
FILES:包含上传的文件
COOKIES:包含所有的cookies
session:表示当前会话
HttpRequest对象的属性GET、POST都是QueryDict类型的对象
QueryDict类型的对象用来处理同一个键带有多个值的情况
get 根据键获取值,如果一个键有多个值默认获取最后一个值。键不存在返回None。
getlist 根据键获取值,值以列表形势返回,可以获取指定键的所有值。键不存在返回空列表。
/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/(?[a-z]+)/(?\d{4})/$'.views.weather)
def weather(request,year,city):
ptint('city=%s'%city)
print('year=%s'%year)
return HttpResponse('OK')
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–服务器的端口(以字符串形式)。