Django View Request和Response


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























發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章