HttpRequest objects
属性
HttpRequest.scheme
表示请求协议的字符串(通常是http或https)。
HttpRequest.body
原始HTTP请求主体作为字节字符串。这对于以不同于传统HTML表单的方式处理数据非常有用:二进制图像、XML有效负载等。对于处理传统表单数据,使用HttpRequest.POST。
HttpRequest.path
表示请求页的完整路径的字符串,不包括HttpRequest.scheme或域名。
示例:“/music/bands/ the_beatles /”
HttpRequest.path_info
在一些Web服务器配置中,主机名之后的URL部分被分成脚本前缀部分和路径信息部分。无论使用什么Web服务器,path_info属性总是包含路径的path info部分。使用这个替代路径可以使您的代码更容易在测试服务器和部署服务器之间移动。
例如,如果应用程序的WSGIScriptAlias设置为“/minfo”,那么path可能是“/minfo/music/bands/”,path_info可能是“/music/bands/the_beatles/”
HttpRequest.method
表示请求中使用的HTTP方法的字符串。这保证是大写的。
if request.method == 'GET':
do_something()
elif request.method == 'POST':
do_something_else()
HttpRequest.encoding
HttpRequest.encoding
表示请求的MIME类型的字符串,从CONTENT_TYPE报头解析
HttpRequest.content_params
CONTENT_TYPE报头中包含的键/值参数字典
HttpRequest.GET
包含所有HTTP GET参数的类字典对象。
HttpRequest.POST
包含所有HTTP POST参数的类字典对象。
HttpRequest.COOKIES
包含所有cookie的字典。键和值是字符串。
HttpRequest.FILES
包含所有上传文件的类字典对象。文件中的每个键是来自<input type="file" name=" >。文件中的每个值都是一个上传文件。
如果请求方法是POST,并且提交到请求的具有enctype="multipart/form-data",文件将只包含数据。否则,文件将是一个类似于字典的空白对象。
HttpRequest.META
包含所有可用HTTP头的字典。可用的标头取决于客户端和服务器,但这里有一些例子
HttpRequest.current_app
url模板标记将使用它的值作为current_app参数来反转()
HttpRequest.urlconf
这将用作当前请求的根URLconf,覆盖ROOT_URLCONF设置。
HttpRequest.session
来自SessionMiddleware:一个可读的、可写的、类词典的对象,它代表当前会话。
HttpRequest.site
来自CurrentSiteMiddleware:表示当前站点的get_current_site()返回的站点或RequestSite实例。
HttpRequest.user
来自AuthenticationMiddleware: AUTH_USER_MODEL的实例,该实例表示当前登录的用户。如果用户当前没有登录,用户将被设置为AnonymousUser实例。你可以用is_authenticated区分它们,比如:
if request.user.is_authenticated:
... # Do something for logged-in users.
else:
... # Do something for anonymous users.
方法
HttpRequest.get_host()
返回host
HttpRequest.get_port()
返回port
HttpRequest.get_full_path()
返回path
HttpRequest.get_full_path_info()
返回path_info
HttpRequest.build_absolute_uri(location)
返回location绝对路径,若不提供location参数,默认使用HttpRequest.get_full_path()
HttpRequest.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)
返回cookie的值,defalut为默认值,salt防止暴力破解密钥,max_age为生命周期
>>> request.get_signed_cookie('name')
'Tony'
>>> request.get_signed_cookie('name', salt='name-salt')
'Tony' # assuming cookie was set using the same salt
>>> request.get_signed_cookie('nonexistent-cookie')
...
KeyError: 'nonexistent-cookie'
>>> request.get_signed_cookie('nonexistent-cookie', False)
False
>>> request.get_signed_cookie('cookie-that-was-tampered-with')
...
BadSignature: ...
>>> request.get_signed_cookie('name', max_age=60)
...
SignatureExpired: Signature age 1677.3839159 > 60 seconds
>>> request.get_signed_cookie('name', False, max_age=60)
False
HttpRequest.is_secure()
如果是安全的(https请求)返回True
HttpRequest.is_ajax()
如果是ajax请求 返回True
HttpRequest.read
HttpRequest.readline()
HttpRequest.readlines()
HttpRequest.iter()
提供了可迭代方法
HttpRresponse objects
用法
典型的用法是将页面的内容作为字符串传递
>>> from django.http import HttpResponse
>>> response = HttpResponse("Here's the text of the Web page.")
>>> response = HttpResponse("Text only, please.", content_type="text/plain")
如果您想增量地添加内容,您可以使用response作为类文件对象
>>> response = HttpResponse()
>>> response.write("<p>Here's the text of the Web page.</p>")
>>> response.write("<p>Here's another paragraph.</p>")
设置头信息
类似与字典的用法
>>> response = HttpResponse()
>>> response['Age'] = 120
>>> del response['Age']
告诉浏览器将响应视为文件附件
要告诉浏览器将响应视为文件附件,请使用content_type参数并设置内容配置头。
# 返回Microsoft Excel电子表格的方式:
>>> response = HttpResponse(my_data, content_type='application/vnd.ms-excel')
>>> response['Content-Disposition'] = 'attachment; filename="foo.xls"'
属性
HttpResponse.content
HttpResponse.charset
HttpResponse.status_code
HttpResponse.reason_phrase
HttpResponse.streaming
HttpResponse.closed
方法
HttpResponse.__init__(content='', content_type=None, status=200, reason=None, charset=None)[source]
HttpResponse.__delitem__(header)
HttpResponse.__getitem__(header)
HttpResponse.has_header(header)
HttpResponse.setdefault(header, value)
HttpResponse.set_cookie(key, value='', max_age=None, expires=None, path='/', domain=None, secure=None, httponly=False, samesite=None)
HttpResponse.set_signed_cookie(key, value, salt='', max_age=None, expires=None, path='/', domain=None, secure=None, httponly=False, samesite=None)
HttpResponse.delete_cookie(key, path='/', domain=None)
HttpResponse.flush()
HttpResponse.tell()[source]
HttpResponse.getvalue()[source]
HttpResponse.readable()
HttpResponse.seekable()
HttpResponse.writable()[source]
HttpResponse.writelines(lines)[source]
HttpResponse subclasses
HttpResponseRedirect
重定向
HttpResponsePermanentRedirect
永久重定向,返回状态码301而不是302
HttpResponseNotModified
构造函数不接受任何参数,并且不应该向此响应添加任何内容。使用此设置可以指定自用户上次请求(状态码304)以来没有修改过页面。
HttpResponseBadRequest
像HttpResponse一样,使用400状态码。
HttpResponseNotFound
像HttpResponse一样,使用404状态码。
HttpResponseForbidden
像HttpResponse一样,使用403状态码。
HttpResponseNotAllowed
像HttpResponse一样,使用405状态码。
HttpResponseGone
像HttpResponse一样,使用410状态码。
HttpResponseServerError
像HttpResponse一样,使用500状态码。
JsonResponse
class JsonResponse(data, encoder=DjangoJSONEncoder, safe=True, json_dumps_params=None, **kwargs)
HttpResponse子类,帮助创建json编码的响应。它继承了它的超类的大部分行为,但有几个不同之处:
它的默认内容类型头被设置为application/json。
data:应该是一个dict实例。如果将安全参数设置为False(参见下面),那么它可以是任何JSON-serializable对象。
encoder:默认为django.core.serializers.json.DjangoJSONEncoder,将用于序列化数据。有关这个序列化器的详细信息,请参阅JSON序列化。
safe:默认为True。如果设置为False,则可以为序列化传递任何对象(否则只允许使用dict实例)。如果safe为真,并且将一个非dict对象作为第一个参数传递,则会引发类型错误。
json_dumps_params:是一个关键字参数字典,用于传递给用于生成响应的json.dumps()调用。
用法
>>> from django.http import JsonResponse
>>> response = JsonResponse({'foo': 'bar'})
>>> response.content
b'{"foo": "bar"}'
序列化一个非字典对象
>>> response = JsonResponse([1, 2, 3], safe=False)
使用自定义编译器
>>> response = JsonResponse(data, encoder=MyJSONEncoder)
StreamingHttpResponse
StreamingHttpResponse类用于将Django的响应流传输到浏览器。如果生成响应的时间太长或占用了太多内存,您可能希望这样做。例如,它对于生成大型CSV文件非常有用。
性能考虑
Django是为短期请求而设计的。流响应将在响应的整个持续时间内连接工作进程。这可能导致较差的性能。
一般来说,您应该在请求-响应周期之外执行昂贵的任务,而不是求助于流响应。
属性
StreamingHttpResponse.streaming_content
表示内容的字符串的迭代器。
StreamingHttpResponse.status_code
Http请求的状态码
StreamingHttpResponse.reason_phrase
Http的reason phrase。
StreamingHttpResponse.streaming
总是True
FileResponse objects
class FileResponse(open_file, as_attachment=False, filename='', **kwargs)
>>> from django.http import FileResponse
>>> response = FileResponse(open('myfile.png', 'rb'))