request
基礎(chǔ)屬性
scheme body(原始的請求體) POST(對應(yīng)可轉(zhuǎn)換的內(nèi)容)
另外提供了read這樣的文件類接口使用
path(請求的完整路徑不包含模式和域名) path_info(對于一些服務(wù)器俗批,把域名后的url分成了腳本前綴部分和路徑信息部分 path_info肯定是全部的)
使用path_info總是能拿到域名后的完整的url
method(方法名 大寫) encoding(默認(rèn)用utf-8 在DEFAULT_CHARSET铸题,可以改變encoding的值再獲取GET POST) content_type(字符類型拿請求頭部的CONTENT_TYPE) content_params(字典類型拿請求頭部的CONTENT_TYPE)
GET POST body FILES COOKIES
META(所有的頭部 會轉(zhuǎn)換名字 都搞成大寫的下劃線分割的同時(shí)有HTTP_的前綴)
resolver_match是對應(yīng)ResolverMatch的實(shí)例,代表解析得的URL,在view中可用速客,但是在解析之前的middleware是獲取不到的
應(yīng)用屬性
current_app 用于url template tag,在reverse函數(shù)的current_app參數(shù)
urlconf 用于root url conf而不是用ROOT_URLCONF中的設(shè)置
中間件屬性
session 由SessionMiddleware設(shè)置 可讀可寫 字典類
site 由CurrentSiteMiddleware設(shè)置 是Site或RequestSite的實(shí)例苍柏,是通過get_current_site來獲取的
user 由AuthenticationMiddleware設(shè)置 是AUTH_USER_MODEL對應(yīng)的實(shí)例代表當(dāng)前登錄的用戶画切,未登錄的獲取的是AnonymousUser,可通過request.user.is_authenticated來判斷
方法
get_host 獲得請求的主機(jī) 通過HTTP_X_FORWARDED_HOST否則用HTTP_HOST长踊,都沒有則使用SERVER_NAME和SERVER_PORT的組合
get_full_path 獲得path加查詢字符串query_string
build_absolute_uri(location) 將location轉(zhuǎn)換為絕對地址功舀,location不傳入時(shí)用的是get_full_path獲取,如果已經(jīng)是絕對地址則不修改身弊,用的是請求中的服務(wù)信息辟汰,例如http和https的設(shè)置
get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None) 返回一個(gè)簽名的cookie值,或拋出BadSignature異常佑刷,如果設(shè)置了default則返回該值而不拋出異常莉擒,可以加鹽,可以設(shè)置過期
is_secure 查看是否https
is_ajax 查看是否Ajax請求瘫絮,即查看頭部的HTTP_X_REQUESTED_WITH
read readline readlines xreadlines iter
QueryDict
主要是處理一個(gè)名字多個(gè)值的情況涨冀,因?yàn)閷τ贖TML中的form元素,多選的麦萤,都是相同的名字鹿鳖,不同的值
通過GET POST獲取的都是不可修改的,可以使用.copy()來獲取可修改的版本
實(shí)現(xiàn)了標(biāo)準(zhǔn)字典的所有方法
QueryDict.init(query_string=None, mutable=False, encoding=None)
classmethod QueryDict.fromkeys(iterable, value='', mutable=False, encoding=None)
QueryDict.getitem(key) 如果對應(yīng)多個(gè)值 返回最后一個(gè)
QueryDict.setitem(key, value) 設(shè)置值 value應(yīng)為列表
QueryDict.contains(key) 判斷是否包含
QueryDict.get(key, default=None) 返回對應(yīng)的值 沒有則返回default
QueryDict.setdefault(key, default=None) 沒有值則設(shè)置為default
QueryDict.update(other_dict)
QueryDict.items()
QueryDict.iteritems()
QueryDict.iterlists()
QueryDict.values()
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()
QueryDict.pop(key)
QueryDict.popitem()
QueryDict.dict()
QueryDict.urlencode(safe=None)
response
直接傳遞字符串
response = HttpResponse("Here's the text of the Web page.")
增量內(nèi)容
response = HttpResponse()
response.write("<p>Here's the text of the Web page.</p>")
response.write("<p>Here's another paragraph.</p>")
使用StreamingHttpResponse來消費(fèi)可迭代對象
按字典使用來設(shè)置HTTP頭部
response["Accept"] = "json"
del response['Age']
告訴瀏覽器返回的response是文件
response = HttpResponse(my_data, content_type='application/vnd.ms-excel')
response['Content-Disposition'] = 'attachment; filename="foo.xls"'
屬性
content charset status_code reason_phrase streaming closed
方法
HttpResponse.init(content='', content_type=None, status=200, reason=None, charset=None)
setitem delitem getitem
has_header setdefault
set_cookie(key, value='', max_age=None, expires=None, path='/', domain=None, secure=None, httponly=False)
set_signed_cookie(key, value, salt='', max_age=None, expires=None, path='/', domain=None, secure=None, httponly=False)
delete_cookie(key, path='/', domain=None)
write(content) flush() tell() getvalue() readable() seekable() writable() writelines(lines)