Python學習筆記-第17天:實戰(zhàn)練習(4)

第十七天 實戰(zhàn)練習(4)

今天計劃用Python繼續(xù)一個web開發(fā)的實戰(zhàn)項目練習释漆,學習項目及練習源碼地址:
GitHub源碼

補坑

多個裝飾器

在處理session middware時遇到個奇怪的坑桥帆,經(jīng)調(diào)試發(fā)現(xiàn)耻卡,aiohttp_session在處理時是在app handler上加了一個裝飾器,和本來處理handler response的裝飾器發(fā)生沖突。專門研究了多個裝飾器的執(zhí)行順序問題。

def decorator_a(func):
    print('Get in decorator_a')
    def inner_a(*args,**kwargs):
        print('Get in inner_a')
        res = func(*args,**kwargs)
        return res
    return inner_a

def decorator_b(func):
    print('Get in decorator_b')
    def inner_b(*args,**kwargs):
        print('Get in inner_b')
        res = func(*args,**kwargs)
        return res
    return inner_b


@decorator_b
@decorator_a
def f(x):
    print('Get in f')
    return x * 2
f(1)
'''
Get in decorator_a
Get in decorator_b
Get in inner_b
Get in inner_a
Get in f
'''

從上面的輸出,很容易首先是按裝飾器的的裝飾順序內(nèi)到外一次裝入宝踪,執(zhí)行的時候按裝入的順序執(zhí)行,最后執(zhí)行被裝飾的函數(shù)碍扔。

所以瘩燥,在實戰(zhàn)中需要將session裝飾器,放到response handler后面不同。

aiohttp_session.setup(app, storage)
app.middlewares.append(response_factory) #一定要放在session的后面,保證先執(zhí)行這個

如果從使用的角度來看厉膀,裝飾器其實是自頂向下的(畢竟實際使用過程中一般不會在外層打印信息)

意思就是說app.middlewares這個列表中定義的中間件,最先執(zhí)行的是列表最后一個元素二拐,然后依次序向上服鹅,這個在實際工作中一定要注意。

在servie層中定義is_login()裝飾器

為了保持路由層的簡潔百新,將一些常用的裝飾放入service中企软,這個也是符合業(yè)務邏輯的。判斷一個請求是否已經(jīng)登錄本身就是一個業(yè)務控制邏輯饭望。

aiohttp_jinja2模塊暫停使用

采用另一中方式來渲染模板仗哨,需要暫時停用aiohttp_jinja2形庭。它內(nèi)部提供的裝飾器與現(xiàn)有裝飾器有一定沖突。

統(tǒng)一處理返回response

async def response_factory(app, handler):
    async def response(request):
        logging.info('Response handler...')
        r = await handler(request)
        if isinstance(r, web.StreamResponse):  # 這里期望是在handler處理之后繼續(xù)進行處理厌漂,這個和之前的session有關系
            return r
        if isinstance(r, bytes):
# 最終返回到結(jié)果是經(jīng)過一些列封裝后的web.Response對象萨醒,在session中會繼續(xù)處理這個對象

預處理請求的數(shù)據(jù)

async def data_factory(app, handler):
    async def parse_data(request):
        if request.method == 'POST':
            if request.content_type.startswith('application/json'):
                request.__data__ = await request.json()
                logging.info('request json: %s' % str(request.__data__))
            elif request.content_type.startswith('application/x-www-form-urlencoded'):
                request.__data__ = await request.post()
                logging.info('request form: %s' % str(request.__data__))
        return (await handler(request))
# 注意和上面的response書寫結(jié)構進行對比,此處的目的是預處理請求的參數(shù)苇倡,那么應該放在handler前面

綜上富纸,可以很好的理解多個裝飾器以及app.middware該如何使用了

找一個合適的模板

打算用傳統(tǒng)的bootstrap和jquery還實現(xiàn)期望的目的。

避開前后分離旨椒,注重于后端代碼的學習

計劃

下一次完成博客內(nèi)容的添加

  1. 完善用戶登錄和未登錄狀態(tài)
  2. 需要實現(xiàn)用戶在線通過富文本編輯博客內(nèi)容胜嗓。
  3. 展現(xiàn)文章列表和詳情
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市钩乍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌怔锌,老刑警劉巖寥粹,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異埃元,居然都是意外死亡涝涤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門岛杀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來阔拳,“玉大人,你說我怎么就攤上這事类嗤『Γ” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵遗锣,是天一觀的道長货裹。 經(jīng)常有香客問我,道長精偿,這世上最難降的妖魔是什么弧圆? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮笔咽,結(jié)果婚禮上搔预,老公的妹妹穿的比我還像新娘。我一直安慰自己叶组,他們只是感情好拯田,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著甩十,像睡著了一般勿锅。 火紅的嫁衣襯著肌膚如雪帕膜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天溢十,我揣著相機與錄音垮刹,去河邊找鬼。 笑死张弛,一個胖子當著我的面吹牛荒典,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播吞鸭,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼寺董,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了刻剥?” 一聲冷哼從身側(cè)響起遮咖,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎造虏,沒想到半個月后御吞,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡漓藕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年陶珠,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片享钞。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡揍诽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出栗竖,到底是詐尸還是另有隱情暑脆,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布狐肢,位于F島的核電站饵筑,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏处坪。R本人自食惡果不足惜根资,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望同窘。 院中可真熱鬧玄帕,春花似錦、人聲如沸想邦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鹰椒,卻和暖如春锡移,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背漆际。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工淆珊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人奸汇。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓施符,卻偏偏與公主長得像,于是被迫代替她去往敵國和親擂找。 傳聞我的和親對象是個殘疾皇子戳吝,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

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

  • 快速開始 在安裝Sanic之前,讓我們一起來看看Python在支持異步的過程中贯涎,都經(jīng)歷了哪些比較重大的更新听哭。 首先...
    hugoren閱讀 19,472評論 0 23
  • 第十六天 實戰(zhàn)練習(3) 今天計劃用Python繼續(xù)一個web開發(fā)的實戰(zhàn)項目練習,學習項目及練習源碼地址:GitH...
    6d1bf2ffc4f3閱讀 715評論 0 51
  • typora-copy-images-to: ipic [TOC] 配置環(huán)境 首先檢查你的python版本: 安裝...
    君惜丶閱讀 8,031評論 1 14
  • 對于java中的思考的方向塘雳,1必須要看前端的頁面陆盘,對于前端的頁面基本的邏輯,如果能理解最好粉捻,不理解也要知道幾點。 ...
    神尤魯?shù)婪?/span>閱讀 802評論 0 0
  • 文/紅色冬天 小燕子斑芜,穿花衣肩刃,年年春天來這里,我問燕子你為啥來杏头,燕子說盈包,這里的春天最美麗! 舊時王謝堂前燕醇王,飛入尋...
    遇見子魚閱讀 147評論 0 4