老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)

教你快速學(xué)會(huì)web開(kāi)發(fā)之tornado-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!

目前成都創(chuàng)新互聯(lián)公司已為上千多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機(jī)、網(wǎng)站托管維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、靈川網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

如何快速學(xué)會(huì)web開(kāi)發(fā)之tornado?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

一、從 hello, world 開(kāi)始

如果你的 python 環(huán)境還沒(méi)有安裝 tornado,請(qǐng)直接使用 pip 安裝:

pip install tornado

下面的代碼,雖然只有區(qū)區(qū)六行(不包括導(dǎo)入模塊的兩行),卻是一個(gè)完整的 web 服務(wù)程序。運(yùn)行下面的代碼,就開(kāi)啟了一個(gè) web 服務(wù),從本機(jī)瀏覽器直接訪問(wèn) http://127.0.0.1,不出意外的話,我們的第一個(gè)網(wǎng)頁(yè) hello, world 即可正常顯示出來(lái)。

demo.py

# -*- coding: utf-8 -*-
import tornado.ioloop 
import tornado.web
class HomeHandler(tornado.web.RequestHandler): 
    def get(self): # 響應(yīng)以get方式發(fā)送的請(qǐng)求
        self.write("hello, world") # 向請(qǐng)求者(瀏覽器)應(yīng)答hello, world
app = tornado.web.Application([ (r"/", HomeHandler), ]) # URL映射
app.listen(80) # 綁定偵聽(tīng)端口
tornado.ioloop.IOLoop.instance().start() # 啟動(dòng)服務(wù)

如果多少了解一點(diǎn) http 協(xié)議,知道 get / post 方法,相信你一定能夠讀懂。也許你的項(xiàng)目規(guī)劃了很多的url,也許你的服務(wù)需要監(jiān)聽(tīng)非80端口,沒(méi)有關(guān)系,在這個(gè)代碼上擴(kuò)展就行。僅僅六行!!!請(qǐng)讓我們向犀利的、簡(jiǎn)潔的、無(wú)所不能的 python 致敬!

劃重點(diǎn):tornado.web.RequestHandler.write() 不只可以接受字符串參數(shù),還可以接受列表或字典參數(shù)——如果應(yīng)答類型為json時(shí),這個(gè)重載特性非常高效。

二、最簡(jiǎn)單的登錄

假定我們有這樣一個(gè) web 服務(wù)需求:

(1)首頁(yè):地址“/”,顯示“點(diǎn)此登錄”兩個(gè)漢字,點(diǎn)擊則跳轉(zhuǎn)到登錄頁(yè)面;

(2)登錄頁(yè):地址“/login”,以 get 方式訪問(wèn),則顯示賬號(hào)、密碼輸入框和登錄按鈕;以 post 方式訪問(wèn),則是提交表單提交,驗(yàn)證登錄信息。登錄成功,跳轉(zhuǎn)至個(gè)人信息頁(yè)面,否則,跳轉(zhuǎn)至首頁(yè);

(3)個(gè)人信息頁(yè):地址“/me”,顯示登錄賬號(hào)。

以上面的代碼為基礎(chǔ),我們首先要做的工作是 URL 和 對(duì)應(yīng)的處理類之間的關(guān)聯(lián)。這件工作實(shí)際上是非常輕松愉快的:

app = tornado.web.Application([
(r"/", HomeHandler), 
(r"/login", LoginHandler), 
(r"/me", MeHandler)
])

接下來(lái),我們要實(shí)現(xiàn) HomeHandler、LoginHandler 和 MeHandler 這三個(gè)類了。通常,我們習(xí)慣把這些和URL 對(duì)應(yīng)的處理類,保存為一個(gè)獨(dú)立的文件,比如文件名為 handlers.py,然后在服務(wù)器腳本 demo.py 中導(dǎo)入它們。

handlers.py

# -*- coding: utf-8 -*-
import tornado.web
class HomeHandler(tornado.web.RequestHandler): 
    """響應(yīng)主頁(yè)請(qǐng)求"""
    
    def get(self): # 以get方式請(qǐng)求
        self.write("""點(diǎn)此登錄""")
class LoginHandler(tornado.web.RequestHandler): 
    """響應(yīng)登錄頁(yè)請(qǐng)求"""
    
    def get(self): # 以get方式請(qǐng)求
        self.write(
            """
            
                賬號(hào):
                密碼:
                
            
            """
        )
    
    def post(self): # 以post方式請(qǐng)求(本例為提交表單)
        account = self.get_argument('account', None)
        passwd = self.get_argument('passwd', None)
        
        if account == 'xufive' and passwd == 'dgdgwstd':
            self.redirect('/me?name=%s'%account)
        else:
            self.redirect('/')
class MeHandler(tornado.web.RequestHandler): 
    """響應(yīng)個(gè)人信息頁(yè)請(qǐng)求"""
    
    def get(self): # 以get方式請(qǐng)求
        name = self.get_argument('name', None)
        if name:
            self.write(
                """
                
                歡迎你來(lái)到這里,%s
                """%name
            )
        else:
            self.redirect('/')

相應(yīng)地,服務(wù)腳本變成了這樣:

demo.py

# -*- coding: utf-8 -*-
import os
import tornado.ioloop 
import tornado.web
from tornado.options import parse_command_line
from handlers import *
parse_command_line()
app = tornado.web.Application(
    handlers=[
        (r"/", HomeHandler), 
        (r"/login", LoginHandler), 
        (r"/me", MeHandler)
    ],
    template_path = os.path.join(os.path.dirname(__file__), 'templates')
)
app.listen(80) # 綁定偵聽(tīng)端口
tornado.ioloop.IOLoop.instance().start() # 啟動(dòng)服務(wù)

劃重點(diǎn):tornado.web.RequestHandler.get_argument() 可以讀取通過(guò)表單和QueryString傳遞的參數(shù)。

三、模板技術(shù)

讀到這里,你一定會(huì)覺(jué)得奇怪:為什么服務(wù)端程序里面混雜了一大堆的 html 代碼?Don’t worry,以上的代碼僅僅是幫助你建立基本概念的,實(shí)際上,tornado 是為數(shù)不多的支持模板技術(shù)很到位的框架之一,其模板技術(shù)不僅支持繼承,支持子模版。讓我們一步一步討論如何使用模板。

第1步:模板保存在哪兒?

在服務(wù)端腳本里,當(dāng)我們使用 tornado.web.Application() 創(chuàng)建一個(gè)應(yīng)用時(shí),通常需要傳遞一個(gè) template_path 參數(shù),這個(gè)參數(shù)就是模板文件的保存路徑。上面的例子已經(jīng)增加了這個(gè)參數(shù),我們只要把模板文件放在和 demo.py 同級(jí)的 templates 文件夾下就可以了。

第2步:怎樣寫模板?

其實(shí),模板就是 html 文件,只是其中混雜了少量特別約定的符號(hào)。一個(gè) web 項(xiàng)目,通常由若干頁(yè)面組成,這些頁(yè)面有很多共同的地方,因此一個(gè)基類模板是必要的。

base.html



  
    
    
  
  
  {% block block_body %}{% end %}
  

基類模板 base.html 定義了一個(gè) block_body 容器,如果有必要,我們?cè)诨惸0宓娜我馕恢枚x更多的容器。假定我們需要一個(gè)個(gè)人信息頁(yè)模板,可以直接繼承 base.html,然后只填寫 block_body 這一部分就行了。

me.html

{% extends "base.html" %}
{% block block_body %}

歡迎你來(lái)到這里,{{name}}

{% end %}

個(gè)人信息頁(yè)模板引中,我們使用 {{}} 引用了一個(gè)變量 name。

第3步:如何使用模板?

很簡(jiǎn)單,前面我們用 tornado.web.RequestHandler.write() 向?yàn)g覽器應(yīng)答信息,現(xiàn)在則是這樣使用模板:

class MeHandler(tornado.web.RequestHandler): 
    """響應(yīng)個(gè)人信息頁(yè)請(qǐng)求"""
    
    def get(self): # 以get方式請(qǐng)求
        name = self.get_argument('name', None)
        if name:
            self.render('me.html', name=name )
        else:
            self.redirect('/')

常用的模板語(yǔ)法匯總,如下:

(1)引用變量:{{…}}

(2)引用 python 表達(dá)式:{%…%}

(3)循環(huán):{% for var in expr %}…{% end %}

(4)分支:{% if condition %}…{% elif condition %}…{% else %}…{% end %}

(5)引用原生表達(dá)式:{% raw expr %}

四、Cookie 演練

tornado.web.RequestHandler 的 cookie 操作非常靈活,下面的 handler 展示了 cookie 的基本讀寫方法:

class CookieHandler(tornado.web.RequestHandler):
    def get(self):
        visit_num = self.get_cookie('visit_num')
        if not visit_num:
            visit_num = '0'
        visit_num = str(int(visit_num)+1)
        #self.set_cookie('visit_num', visit_num, expires=None) # 內(nèi)存cookie
        self.set_cookie('visit_num', visit_num, expires=time.time()+1000) # 持久化的cookie
        self.write("這是您第%s次訪問(wèn)本頁(yè)面"%visit_num)

如果我們要使用持久化的 Cookie(硬盤 Cookie),為了防止被破解,一般是要加密的,那么,在 tornado.web.Application 中需要設(shè)置 cookie_secret 項(xiàng)(加密因子)。

定義tornado.web.Application,這是我最常用的一個(gè)模式:

class Application(tornado.web.Application):
    def __init__(self):
        handlers = [
            (r"/", WelcomeHandler),                # 歡迎信息
            (r"/server_time",ServerTimeHandler)    # 顯示服務(wù)器時(shí)間
        ]
        settings = dict(
            title = u"網(wǎng)站名稱",
            template_path = os.path.join(os.path.dirname(__file__), 'templates'),
            static_path = os.path.join(os.path.dirname(__file__), 'static'),
            cookie_secret = 'rewqr4gfd654fdsg@$%34dfs',
            session_expiry = 0,
            login_url = "/",
            debug = 1
        )
        
        tornado.web.Application.__init__(self, handlers, **settings)

五、Session 擴(kuò)展

為 tornado 增加 session 機(jī)制,基本思路就是從 tornado.web.RequestHandler 派生新類,重寫 initialize() 方法。當(dāng)類實(shí)例被構(gòu)造函數(shù)創(chuàng)建后,會(huì)先運(yùn)行該方法。我們定義 initialize() 方法讀取名為 session_id 的 cookie,如果存在,則讀取以 session_id 命名的 session 文件,取得 session 內(nèi)容,否則,session 為空。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。


名稱欄目:教你快速學(xué)會(huì)web開(kāi)發(fā)之tornado-創(chuàng)新互聯(lián)
瀏覽地址:http://www.xueling.net.cn/article/csdssh.html

其他資訊

在線咨詢
服務(wù)熱線
服務(wù)熱線:028-86922220
TOP
主站蜘蛛池模板: 99久久精品费精品国产风间由美 | 亚洲日本欧美综合在线一 | 四区福利视频 | 成人无码区在线观看 | 东京热无码AV在线 | 日日摸夜夜骑 | 男人激烈吮乳吃奶动图 | 91免费网站入口 | 欧美自拍网| 国产一区二区三区免费在线观看 | 成人a级| 1000部拍拍拍18勿入免费视频 | 国产在线精品一区二区在线播放 | 日韩精品一区二区三区色 | 9传媒制片厂制作在线观看 极品美女a诱v惑在线观看免费 | 欧美日韩不卡在线视频 | 国产字幕在线看 | 成人午夜免费在线视频 | 91性高潮久久久久久久久 | 日日摸夜夜骑 | 国产成人久久精品77777 | 国产精品一区二区免费视频 | 91成人观看 | 尤物99国产成人精品视频 | 久久另类ts人妖一区二区 | 国产免费中文字幕 | 第九色区AV天堂 | 国产99视频精品免费视频76 | 国产精品国语对白露脸在 | 欧美精品1区 | 欧美高清在线一区二区 | 国产精品自产拍在线观看中文 | 国产亚洲精品一品区99热 | 欧美一级大片免费看 | 国产精品无码午夜福利 | 国产精品日本一区二区在线播放 | 日本特级录像片 | 天天躁夜夜躁狠狠久久 | 强壮的公次次弄得我高潮a片日本 | 亚洲人精品 | 2017男人天堂手机在线 |