国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python:Tornado 第二章:實(shí)戰(zhàn)演練:開(kāi)發(fā)Tornado網(wǎng)站:第八節(jié):用戶身份認(rèn)證

Kahn / 3458人閱讀

摘要:上一篇文章第二章實(shí)戰(zhàn)演練開(kāi)發(fā)網(wǎng)站第七節(jié)安全機(jī)制下一篇文章第二章實(shí)戰(zhàn)演練開(kāi)發(fā)網(wǎng)站第九節(jié)防止跨站攻擊在的類中有一個(gè)屬性用于保存當(dāng)前請(qǐng)求的用戶名。實(shí)例使用屬性及方法來(lái)實(shí)現(xiàn)用戶身份控制。該地址被用于裝飾器在發(fā)現(xiàn)用戶尚未驗(yàn)證時(shí)重定向到一個(gè)。

上一篇文章:Python:Tornado 第二章:實(shí)戰(zhàn)演練:開(kāi)發(fā)Tornado網(wǎng)站:第七節(jié):安全Cookie機(jī)制
下一篇文章:Python:Tornado 第二章:實(shí)戰(zhàn)演練:開(kāi)發(fā)Tornado網(wǎng)站:第九節(jié):防止跨站攻擊

在Tornado的RequestHandler類中有一個(gè)current_user屬性用于保存當(dāng)前請(qǐng)求的用戶名。RequestHandler.get_current_user的默認(rèn)值是None,在get()、post()等處理函數(shù)中可以隨時(shí)讀取該屬性以獲取當(dāng)前的用戶名。RequestHandler.current_user是一個(gè)只讀屬性,所以如果想要設(shè)置該屬性值,需要重載RequestHandler.get_current_user()函數(shù)以設(shè)置該屬性值。

實(shí)例:使用RequestHandler.current_user屬性及RequestHandler.get_current_user()方法來(lái)實(shí)現(xiàn)用戶身份控制。

代碼:

import tornado.web
import tornado.ioloop
import uuid  #UUID 生成庫(kù)

dict_sessions={}  #保存所有登錄的Session

class BaseHandler(tornado.web.RequestHandler):  #公共基類
    #寫(xiě)入current_user的函數(shù)
    def get_current_user(self):
        session_id=self.get_secure_cookie("session_id")
        return dict_sessions.get(session_id)

class MainHandler(BaseHandler):
    @tornado.web.authenticated    #需要身份認(rèn)證才能訪問(wèn)的處理器
    def get(self):
        name=tornado.escape.xhtml_escape(self.current_user)
        self.write("Hello,"+name)

class LoginHandler(BaseHandler):
    def get(self):   #登陸頁(yè)面
        self.write("<>body"
                   "
" "Name:" "" "
") def post(self): #驗(yàn)證是否運(yùn)行登陸 if len(self.get_argument("name"))<3: self.redirect("/login") session_id=str(uuid.uuid1()) dict_sessions[session_id]=self.get_argument("name") self.set_secure_cookie("session_id",session_id) self.redirect("/") setting={ "cookie_secret":"SECRET_DONT_LEAK", #Cookie加密秘鑰 "login_url":"/login" #定義登陸頁(yè)面 } application=tornado.web.Application([ (r"/",MainHandler), #URL映射定義 (r"/login",LoginHandler) ],**setting) def main(): application.listen(8888) tornado.ioloop.IOLoop.current().start() #掛起監(jiān)聽(tīng) if __name__ == "__main__": main()

本例演示了一個(gè)完整的身份認(rèn)證編程框架,整體構(gòu)思如下:

用全局字典dict_sessions保存已經(jīng)登錄的用戶信息,為了簡(jiǎn)單些,本例只保存了【回話ID:用戶名】的鍵值對(duì)。

定義公共基類BaseHandler,該類繼承自tornado.web.RequestHandler,用于定義本網(wǎng)站所有處理器的公共屬性和行為。重載它的get_current_user()函數(shù),其在訪問(wèn)RequestHandler.current_user屬性時(shí)自動(dòng)被Tornado調(diào)用。該函數(shù)首先用get_secure_cookie()獲得本次訪問(wèn)的回話ID,然后利用該ID從dict_sessions中獲得用戶名并且返回。

MainHandler類是一個(gè)要求用戶經(jīng)過(guò)身份認(rèn)證才能訪問(wèn)的處理器實(shí)例。該處理器中的處理函數(shù)get()使用了裝飾器tornado.web.authenticated,具有該裝飾器的處理函數(shù)在執(zhí)行之前根據(jù)current_user是否已經(jīng)被賦值來(lái)判斷用戶的身份認(rèn)證情況,如果已經(jīng)被賦值則可以進(jìn)行正常邏輯,否則自動(dòng)重定向到網(wǎng)站的登錄頁(yè)面。

LoginHandler類是登錄頁(yè)面處理器,其get()函數(shù)用于渲染登錄頁(yè)面,post()函數(shù)用于驗(yàn)證是否允許用戶登陸。

在tornado.web.Application的初始化函數(shù)中通過(guò)login_url參數(shù)給出網(wǎng)站的登陸頁(yè)面地址。該地址被用于tornado.web.authenticated裝飾器在發(fā)現(xiàn)用戶尚未驗(yàn)證時(shí)重定向到一個(gè)URL。

注意:加入身份認(rèn)證的所有頁(yè)面處理器需要繼承自BaseHandler類,而不是直接繼承原來(lái)的tornado.web.RequestHandler類。

商用的身份認(rèn)證還要完善更多的內(nèi)容,比如加入密碼驗(yàn)證機(jī)制、管理登陸超時(shí)、將用戶信息保存到數(shù)據(jù)庫(kù)等。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/42616.html

相關(guān)文章

  • PythonTornado 二章實(shí)戰(zhàn)演練開(kāi)發(fā)Tornado網(wǎng)站:第七節(jié):安全Cookie機(jī)制

    摘要:上一篇文章第二章實(shí)戰(zhàn)演練開(kāi)發(fā)網(wǎng)站第六節(jié)異步與協(xié)程化下一篇文章第二章實(shí)戰(zhàn)演練開(kāi)發(fā)網(wǎng)站第八節(jié)用戶身份認(rèn)證是很多網(wǎng)站為了辨別用戶的身份而存儲(chǔ)在用戶本地終端的數(shù)據(jù),在中使用可以方便地對(duì)進(jìn)行讀寫(xiě)。 上一篇文章:Python:Tornado 第二章:實(shí)戰(zhàn)演練:開(kāi)發(fā)Tornado網(wǎng)站:第六節(jié):異步與協(xié)程化下一篇文章:Python:Tornado 第二章:實(shí)戰(zhàn)演練:開(kāi)發(fā)Tornado網(wǎng)站:第八節(jié):用戶...

    dmlllll 評(píng)論0 收藏0
  • PythonTornado 二章實(shí)戰(zhàn)演練開(kāi)發(fā)Tornado網(wǎng)站:第九節(jié):防止跨站攻擊

    摘要:上一篇文章第二章實(shí)戰(zhàn)演練開(kāi)發(fā)網(wǎng)站第八節(jié)用戶身份認(rèn)證下一篇文章第三章概念及應(yīng)用第一節(jié)概念跨站請(qǐng)求偽造,或是一種對(duì)網(wǎng)站的惡意利用。其中是存在漏洞的網(wǎng)站,而是存在攻擊行為的惡意網(wǎng)站。 上一篇文章:Python:Tornado 第二章:實(shí)戰(zhàn)演練:開(kāi)發(fā)Tornado網(wǎng)站:第八節(jié):用戶身份認(rèn)證下一篇文章:Python:Tornado 第三章:HTML5 WebSocket概念及應(yīng)用:第一節(jié):Web...

    Zoom 評(píng)論0 收藏0
  • PythonTornado 二章實(shí)戰(zhàn)演練開(kāi)發(fā)Tornado網(wǎng)站:第六節(jié):異步與協(xié)程化

    摘要:上一篇文章第二章實(shí)戰(zhàn)演練開(kāi)發(fā)網(wǎng)站第五節(jié)輸出相應(yīng)函數(shù)下一篇文章第二章實(shí)戰(zhàn)演練開(kāi)發(fā)網(wǎng)站第七節(jié)安全機(jī)制有兩種方式可改變同步的處理流程異步化針對(duì)的處理函數(shù)使用修飾器,將默認(rèn)的同步機(jī)制改為異步機(jī)制。使用異步對(duì)象處理耗時(shí)操作,比如本例的。 上一篇文章:Python:Tornado 第二章:實(shí)戰(zhàn)演練:開(kāi)發(fā)Tornado網(wǎng)站:第五節(jié):RequestHandler:輸出相應(yīng)函數(shù)下一篇文章:Python:...

    cod7ce 評(píng)論0 收藏0
  • PythonTornado 二章實(shí)戰(zhàn)演練開(kāi)發(fā)Tornado網(wǎng)站第二節(jié):路由解析

    摘要:上一篇文章第二章實(shí)戰(zhàn)演練開(kāi)發(fā)網(wǎng)站第一節(jié)網(wǎng)站結(jié)構(gòu)下一篇文章第二章實(shí)戰(zhàn)演練開(kāi)發(fā)網(wǎng)站第三節(jié)接入點(diǎn)函數(shù)向?qū)ο髠鬟f的第個(gè)參數(shù)路由映射列表的配置方式與類型,用正則字符串進(jìn)行路由匹配。實(shí)例參數(shù)路徑在瀏覽器輸入頁(yè)面輸出其中的是正在表達(dá)式。 上一篇文章:Python:Tornado 第二章:實(shí)戰(zhàn)演練:開(kāi)發(fā)Tornado網(wǎng)站:第一節(jié):網(wǎng)站結(jié)構(gòu):HelloWorld下一篇文章:Python:Tornado ...

    cppprimer 評(píng)論0 收藏0
  • PythonTornado 二章實(shí)戰(zhàn)演練開(kāi)發(fā)Tornado網(wǎng)站:第一節(jié):網(wǎng)站結(jié)構(gòu):Hello

    摘要:上一篇文章第一章異步及協(xié)程基礎(chǔ)第三節(jié)協(xié)程下一篇文章第二章實(shí)戰(zhàn)演練開(kāi)發(fā)網(wǎng)站第二節(jié)網(wǎng)站結(jié)構(gòu)路由解析實(shí)例瀏覽器輸入鏈接頁(yè)面顯示下面逐行解析上面的代碼做了些什么首先通過(guò)語(yǔ)句引入包中的和類。該對(duì)象的第一個(gè)餐食用于定義程序的路由映射。 上一篇文章:Python:Tornado 第一章:異步及協(xié)程基礎(chǔ):第三節(jié):協(xié)程下一篇文章:Python:Tornado 第二章:實(shí)戰(zhàn)演練:開(kāi)發(fā)Tornado網(wǎng)站:第...

    Taonce 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<