Django高級(jí)使用

一惶凝、靜態(tài)文件

  • 配置settings.py
STATIC_URL='/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]
  • 使用
#加載靜態(tài)文件
{% load static %}

#鏈接到靜態(tài)文件
<img src="{% static 'elema/img/1.jpeg' %}">

二、中間件

  • 應(yīng)用場(chǎng)景
本質(zhì): 就是一個(gè)python類
應(yīng)用場(chǎng)景: 統(tǒng)計(jì)叨叙、黑名單私恬、白名單、反爬...
  • 中間件方法
- __init__
    不需要傳參麦萤,服務(wù)器響應(yīng)第一個(gè)請(qǐng)求的時(shí)鹿鳖,會(huì)自動(dòng)調(diào)用,用于確定是否啟用中間件 
- process_request(self,request)
    在視圖執(zhí)行前調(diào)用(即分配url匹配視圖之前),每個(gè)請(qǐng)求都會(huì)調(diào)用壮莹,返回None或HttpResponse對(duì)象
- process_view(self,request,view_func,view_args,view_kwargs)
    調(diào)用視圖之前執(zhí)行,每個(gè)請(qǐng)求都會(huì)調(diào)用翅帜,返回None或HttpResponse對(duì)象
- process_templae_response(self,request,response)
    在視圖剛好執(zhí)行完后調(diào)用,每個(gè)請(qǐng)求都會(huì)調(diào)用命满,返回None或HttpResponse對(duì)象
- process_response(self,request,response)
    所有響應(yīng)返回瀏覽器之前調(diào)用涝滴,每個(gè)請(qǐng)求都會(huì)調(diào)用,返回None或HttpResponse對(duì)象 
- process_exception(self,request,exception)
    當(dāng)視圖出現(xiàn)異常時(shí)調(diào)用胶台,返回HttpResponse對(duì)象

備注: 為什么會(huì)返回HttpRespons對(duì)象歼疮?因?yàn)樵谡?qǐng)求進(jìn)來(lái)后如果有問(wèn)題,就可以不做后續(xù)處理概作,直接給客戶端響應(yīng)腋妙。

  • 方法執(zhí)行順序


    https://upload-images.jianshu.io/upload_images/1801379-824ff49a45e847bf.png
  • 自定義中間件并使用
在工程目錄下middleware目錄下創(chuàng)建應(yīng)用目錄 
- 在middleware/elema中創(chuàng)建一個(gè)elemamiddleware.py 
from django.utils.deprecation import MiddlewareMixin 
class MyMiddle(MiddlewareMixin): 
    # 在視圖執(zhí)行前調(diào)用 
    def process_request(self,reqeust):
        print('get請(qǐng)求,參數(shù)name: ', reqeust.GET.get('name')) 
- 配置settings.py文件(即在MIDDLEWARE中添加上述文件的位置) 
    'middleware.elema.elemamiddleware.MyMiddle'
  • 中間件(黑名單攔截)
# 攔截器讯榕,攔截他黑名單中的IP 
class MyMiddle(MiddlewareMixin): 
    def process_request(self, request): 
        if request.META['REMOTE_ADDR'] in getattr(settings, 'BLOCKED_IPS', []): 
        return HttpResponse('<h1>Forbidden</h1>') 
# settings.py中 
BLOCKED_IPS = [ # IP黑名單 '192.168.0.100' ]
  • 中間件(未登陸處理)
class MyMiddle(MiddlewareMixin): 
    def process_request(self, request): 
        # request.META['REMOTE_ADDR'] 請(qǐng)求的IP地址 
        if request.path !='/meituan/login/': # 檢測(cè)如果不是登錄的話 
            if "username" in request.COOKIES: # 已經(jīng)登錄不做任何處理 
                pass 
            else: # 未登錄,重定向到登錄頁(yè)面 
            return HttpResponseRedirect('/meituan/login/')

三匙睹、文件上傳

  • 注意
- 文件上傳時(shí)愚屁,文件數(shù)據(jù)存儲(chǔ)在request.FILES屬性中
- form表單要上傳文件需要加 enctype="multipart/form-data"
- 上傳文件必須是post請(qǐng)求
  • 存儲(chǔ)路徑
- 在static目錄下創(chuàng)建upfile目錄用于存儲(chǔ)接受上傳的文件
- 配置settings.py文件
    MDEIA_ROOT = os.path.join(BASE_DIR,'static/upfile')
  • 文件內(nèi)容
# 獲取表單上傳的文件內(nèi)容
file = request.FILES['file']

#設(shè)置上傳文件的保存路徑
filePath = os.path.join(settings.MDEIA_ROOT,file.name)

#文件寫入后臺(tái)
with open(filepath,'wb') as fp:

四、分頁(yè)

  • Paginator(列表痕檬,每頁(yè)個(gè)數(shù))
#屬性
- .count:對(duì)象總頁(yè)數(shù)
- .num_pages: 頁(yè)面總數(shù)
- .page_range: 頁(yè)碼列表(頁(yè)碼從1開始)
  • page(num):是Paginator的方法
#屬性
-   .object_list:當(dāng)前頁(yè)面上所有的數(shù)據(jù)(對(duì)象)列表
-   .number:當(dāng)前頁(yè)的頁(yè)碼值
-   .paginator:當(dāng)前page對(duì)象關(guān)聯(lián)的paginator對(duì)象

#方法  
-   .has_next():判斷是否有下一頁(yè)霎槐,如果有返回Ture
-   .has_previous:判斷是否有上一頁(yè),如果有返回Ture
-   .has_other_pages():判斷是否有上一頁(yè)或下一頁(yè)梦谜,如果有返回Ture
-   .next_page_number(): 返回下一頁(yè)的頁(yè)碼丘跌,如果下一頁(yè)不存在拋出InvalidPage異常
-   .previous_page_number(): 返回上一頁(yè)的頁(yè)碼,如果上一頁(yè)不存在拋出InvalidPage異常
-   .len():返回當(dāng)前頁(yè)數(shù)據(jù)的個(gè)數(shù)
  • 實(shí)例
# 所有商品數(shù)據(jù)
    alllist = Goods.objects.all()
#切片處理
    alllist = Goods.objects.all()[0:5]

# 12條數(shù)據(jù)為一頁(yè)唁桩,劃分總頁(yè)數(shù)
# 分頁(yè)對(duì)象
    paginator = Paginator(list(alllist),12)

# 根據(jù)傳入的頁(yè)碼得到Page對(duì)象
    pageobj = paginator.page(page)

# 當(dāng)前頁(yè)的所有數(shù)據(jù)列表(遍歷獲缺帐鳌)
 pageodj_list = pageobj.object_list
 for goods in pageobj_list
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市荒澡,隨后出現(xiàn)的幾起案子报辱,更是在濱河造成了極大的恐慌,老刑警劉巖单山,帶你破解...
    沈念sama閱讀 210,835評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碍现,死亡現(xiàn)場(chǎng)離奇詭異幅疼,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)昼接,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,900評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門爽篷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人慢睡,你說(shuō)我怎么就攤上這事逐工。” “怎么了一睁?”我有些...
    開封第一講書人閱讀 156,481評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵钻弄,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我者吁,道長(zhǎng)窘俺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,303評(píng)論 1 282
  • 正文 為了忘掉前任复凳,我火速辦了婚禮瘤泪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘育八。我一直安慰自己对途,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,375評(píng)論 5 384
  • 文/花漫 我一把揭開白布髓棋。 她就那樣靜靜地躺著实檀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪按声。 梳的紋絲不亂的頭發(fā)上膳犹,一...
    開封第一講書人閱讀 49,729評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音签则,去河邊找鬼须床。 笑死,一個(gè)胖子當(dāng)著我的面吹牛渐裂,可吹牛的內(nèi)容都是我干的豺旬。 我是一名探鬼主播,決...
    沈念sama閱讀 38,877評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼柒凉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼族阅!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起扛拨,我...
    開封第一講書人閱讀 37,633評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤耘分,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體求泰,經(jīng)...
    沈念sama閱讀 44,088評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡央渣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,443評(píng)論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了渴频。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芽丹。...
    茶點(diǎn)故事閱讀 38,563評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拌喉,我是刑警寧澤,帶...
    沈念sama閱讀 34,251評(píng)論 4 328
  • 正文 年R本政府宣布蚊俺,位于F島的核電站,受9級(jí)特大地震影響逛万,放射性物質(zhì)發(fā)生泄漏泳猬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,827評(píng)論 3 312
  • 文/蒙蒙 一宇植、第九天 我趴在偏房一處隱蔽的房頂上張望得封。 院中可真熱鬧,春花似錦指郁、人聲如沸忙上。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,712評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)疫粥。三九已至,卻和暖如春腰懂,著一層夾襖步出監(jiān)牢的瞬間手形,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,943評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工悯恍, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人伙狐。 一個(gè)月前我還...
    沈念sama閱讀 46,240評(píng)論 2 360
  • 正文 我出身青樓涮毫,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親贷屎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子罢防,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,435評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 一、靜態(tài)文件 簡(jiǎn)述 配置settings.py 示例 在項(xiàng)目文件中創(chuàng)建static唉侄,并創(chuàng)建對(duì)應(yīng)的應(yīng)用目錄咒吐,在應(yīng)用目...
    EndEvent閱讀 2,217評(píng)論 1 9
  • 模塊間聯(lián)系越多,其耦合性越強(qiáng),同時(shí)表明其獨(dú)立性越差( 降低耦合性恬叹,可以提高其獨(dú)立性)候生。軟件設(shè)計(jì)中通常用耦合度和內(nèi)聚...
    riverstation閱讀 2,063評(píng)論 0 8
  • django分頁(yè),中間件绽昼,驗(yàn)證碼使用指南 前言 在django中提供了很多的插件功能唯鸭,有利于開發(fā)者快速開發(fā),比如中...
    文化銀兒閱讀 3,986評(píng)論 0 2
  • epub格式下載 感謝@Cluas 鏈接: https://pan.baidu.com/s/1kVGavLd 密碼...
    夜夜月閱讀 57,380評(píng)論 105 379
  • 早上包車出發(fā),一車半天3000盧幣 全天在不間斷下雨菱农,影響出行 第一站:佛教寺廟 下一站:珠寶店 第三站:茶工廠 ...
    咕咕喵喵喵閱讀 264評(píng)論 0 2