== 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