== HttpRequest 对象
- HttpRequest 属性
所有属性应被视为只读的,除非特别声明。
HttpRequest.scheme (http or https)
HttpRequest.body => HttpRequest.read()
HttpRequest.path /app/path/to/
HttpRequest.path_info /path/to/
HttpRequest.method 大写GET, POST
HttpRequest.encoding
HttpRequest.GET 类字典对象(QueryDict)
HttpRequest.POST 类字典对象
HttpRequest.COOKIES python字典
HttpRequest.FILES 类字典对象 => <input type="file" name="" />, UploadedFile
HttpRequest.META python字典
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).
HttpRequest.urlconf 覆盖ROOT_URLCONF
HttpRequest.resolver_match
HttpRequest.current_app
#由中间件设置的属性
HttpRequest.session => SessionMiddleware 可读写的类字典对象
HttpRequest.site => CurrentSiteMiddleware Site
HttpRequest.user =>
- HttpRequest 方法
HttpRequest.get_host() => "127.0.0.1:8000"
HttpRequest.get_full_path() => "/music/bands/the_beatles/?print=true"
HttpRequest.build_absolute_uri(location) => "http://example.com/music/bands/the_beatles/?print=true"
HttpRequest.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)
HttpRequest.is_secure() HTTPS.
HttpRequest.is_ajax()
HttpRequest.read(size=None)
HttpRequest.readline()
HttpRequest.readlines()
HttpRequest.xreadlines()
HttpRequest.__iter__()
- HttpRequest QueryDict
dictionary的子类
QueryDict.__init__(query_string=None, mutable=False, encoding=None)
>>> QueryDict('a=1&a=2&c=3')
<QueryDict: {'a': ['1', '2'], 'c': ['3']}>
QueryDict.__getitem__(key)
QueryDict.__setitem__(key, value)
QueryDict.__contains__(key)
QueryDict.get(key, default=None)
QueryDict.setdefault(key, default=None)
QueryDict.update(other_dict)
QueryDict.values() # 最后一个value
>>> q = QueryDict('a=1&a=2&a=3')
>>> q.values()
['3']
QueryDict.itervalues()
QueryDict.copy()
QueryDict.getlist(key, default=None)
QueryDict.setlist(key, list_)
QueryDict.appendlist(key, item)
QueryDict.setlistdefault(key, default_list=None)
QueryDict.lists()
>>> q = QueryDict('a=1&a=2&a=3')
>>> q.lists()
[('a', ['1', '2', '3'])]
QueryDict.pop(key)
>>> q = QueryDict('a=1&a=2&a=3', mutable=True)
>>> q.pop('a')
['1', '2', '3']
QueryDict.popitem()
>>> q = QueryDict('a=1&a=2&a=3', mutable=True)
>>> q.popitem()
('a', ['1', '2', '3'])
QueryDict.dict()
>>> q = QueryDict('a=1&a=3&a=5')
>>> q.dict()
{'a': '5'}
QueryDict.urlencode(safe=None)
>>> q = QueryDict('a=2&b=3&b=5')
>>> q.urlencode()
'a=2&b=3&b=5'
>>> q = QueryDict(mutable=True)
>>> q['next'] = '/a&b/'
>>> q.urlencode(safe='/') #不要求编码的字符
'next=/a%26b/'
== HttpResponse 对象
- HttpResponse 用法
# 传递字符串
>>> 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 = HttpResponse()
>>> response.write("<p>Here's the text of the Web page.</p>")
>>> response.write("<p>Here's another paragraph.</p>")
# 传递iterators
存储其中的内容为字符串(string)
# 设置Header属性
>>> response = HttpResponse()
>>> response['Age'] = 120
>>> del response['Age']
# 将响应作为一个附件
>>> response = HttpResponse(my_data, content_type='application/vnd.ms-excel')
>>> response['Content-Disposition'] = 'attachment; filename="foo.xls"'
- HttpResponse 属性
HttpResponse.content bytestring表示内容
HttpResponse.charset DEFAULT_CHARSET:'utf-8'
HttpResponse.status_code https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10
HttpResponse.reason_phrase
HttpResponse.streaming always False. 用于区分streaming responses和普通responses
HttpResponse.closed True if the response has been closed.
- HttpResponse 方法
HttpResponse.__init__(content='', content_type=None, status=200, reason=None, charset=None)
# content iterator或string
# content_type 默认值"text/html; charset=utf-8"
HttpResponse.__setitem__(header, value) #header和value都是string
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)
# https://docs.python.org/3/library/http.cookies.html#http.cookies.Morsel
HttpResponse.set_signed_cookie(key, value, salt='', max_age=None, expires=None, path='/', domain=None, secure=None, httponly=True)
HttpResponse.delete_cookie(key, path='/', domain=None)
HttpResponse.write(content)
HttpResponse.flush()
HttpResponse.tell()
HttpResponse.getvalue()
HttpResponse.writable()
HttpResponse.writelines(lines)
- HttpResponse 子类
https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10
class HttpResponseRedirect 重定向 status code 302: found
class HttpResponsePermanentRedirect 重定向 status code 301: moved
class HttpResponseNotModified status code 304
class HttpResponseBadReques status code 400
class HttpResponseNotFound status code 404
class HttpResponseForbidden status code 403
class HttpResponseNotAllowed status code 405
class HttpResponseGone status code 410
class HttpResponseServerError status code 500
== JsonResponse 对象
class JsonResponse(data, encoder=DjangoJSONEncoder, safe=True, **kwargs)
# Content-Type header is set to application/json
# data, dict 对象
# safe, True(默认)只能传dict对象;False可以传任何对象
>>> from django.http import JsonResponse
>>> response = JsonResponse({'foo': 'bar'})
>>> response.content
b'{"foo": "bar"}'
>>> response = JsonResponse([1, 2, 3], safe=False) # safe=False