当一个页面被请求时, Django创建一个包含请求元数据的HttpRequest对象, 然后Django调入合适的视图, 把HttpRequest作为视图函数的第一个参数传入, 每个视图都有返回一个HttpResponse对象.
HttpRequest
HttpRequest表示来自某客户端的一个单独的HTTP请求
HttpRequest对象的属性
- path : 表示提交请求页面完整地址的字符串, 不包括域名
- 如 : “/music/bands/the_beatles/”.
- method : 表示提交请求使用的HTTP方法, 它是大写的.
- 例如 : “GET,POST”
- GET : 一个类字典对象, 包含所有的HTTP的GET参数信息
- POST : 一个类字典对象, 包含所有的HTTP的POST参数信息
- 通过POST提交的请求有可能包含一个空的POST字典, 也就是说, 一个通过POST方法提交的表单可能是空的. 因此不应该使用 if request.POST来判断POST方法的使用, 而是使用 if request.method == “POST” .
- COOKIES : 一个标准的Python字典, 包含所有的cookie. 键和值都是字符串.
FILES : 一个类字典对象, 包含所有上传的文件. FILES的键来自<input type="file" name="" />
中的name. FILES包含以下三个键 :- filename : 字符串, 表示上传文件的文件名
- content-type : 上传文件的内容类型.
- content : 上传文件的原始内容.
- META : 以字典形式, 返回所有有效的HTTP头信息. 在META中有效的任一HTTP头信息都是带有HTTP_前缀的键, 例如:
- HTTP_ACCEPT_ENCODING
- HTTP_ACCEPT_ENCODING
- HTTP_ACCEPT_LANGUAGE
- HTTP_HOST :客户端发送的 Host 头信息。
- HTTP_REFERER :被指向的页面,如果存在的。
- HTTP_USER_AGENT :客户端的user-agent字符串。
- HTTP_X_BENDER : X-Bender 头信息的值, 如果已设的话。
- user : 一个 django.contrib.auth.models.User 对象表示当前登录用户, 若当前用户尚未登录, user会设为 django.contrib.auth.models.AnonymousUser的一个实例, 可以使用 is_authenticated() 区分是否登录 :
if request.user.is_authenticated():
# 已登录的处理
else:
# 未登录的处理
- session : 一个可读写的字典对象, 表示当前session.
- raw_post_data : POST的原始数据
HttpRequest对象的方法
__getitem__(key)
: 请求所给键的GET/POST值, 先查找POST, 然后是GET. 若键不存在, 则引发KeyError异常.- has_key() : 返回True或False. 标识request.GET或request.POST是否包含所给的键.
- get_full_path() : 返回path, 若请求字符串有效, 则附加在之前的path之后, 如 :
"/music/bands/home/?print=true"
. - is_secure() : 如果请求是安全的, 返回True. 也就是说请求是以HTTPS的形式提交的