欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Tornado學(xué)習(xí)筆記(四)-創(chuàng)新互聯(lián)

一、Tornado的語言國(guó)際化方法

十余年的集安網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。網(wǎng)絡(luò)營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整集安建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)公司從事“集安網(wǎng)站設(shè)計(jì)”,“集安網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

Tornado做國(guó)際化折騰了一下下,Tornado這部分的官方文檔太poor了。所以自己記錄一下如何用tornado結(jié)合gettext做國(guó)際化。

第一步,在項(xiàng)目路徑下建立./locales/zh_CN/LC_MESSAGES文件夾。

第二步,使用xgettext或poedit在第一步的文件夾下創(chuàng)建一個(gè)po文件,比如messages.po,我用poedit創(chuàng)建,比xgettext方便一些。

第三步,編輯該messages.po文件,當(dāng)然,po文件有自己特定的格式,需要按照它的格式編寫。

msgid ""
msgstr ""
"Project-Id-Version: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: zh_CN\n"
"X-Generator: Poedit 1.8.4\n"

msgid "Sign in"
msgstr "登入"

msgid "Sign out"
msgstr "登出"

msgid "Username"
msgstr "用戶名"

msgid "Password"
msgstr "密碼"

msgid是網(wǎng)頁里原先的文本內(nèi)容,msgstr是準(zhǔn)備替換的內(nèi)容。新內(nèi)容直接用編輯器往后追加msgid和msgstr就可以了。

第四步,修改HTML網(wǎng)頁模板

{% include '../header.html' %}

<form method="post" action="/User/Signin">
    {{ _("Sign in") }}<br/>
    {{ _("Username") }}<br/>
    <input type="text" name="username" /><br/>
    {{ _("Password") }}<br/>
    <input type="password" name="password" /><br />
    {% module xsrf_form_html() %}
    <input type="submit" name="submit" value="{{ _("Sign in") }}" />
</form>

{% include '../footer.html' %}

html里面的{{ _("Sign in") }}等內(nèi)容就是需要gettext查找和替換的內(nèi)容。

第五步,在tornado主文件內(nèi)添加gettext支持的方法。

import os
import tornado.autoreload
import tornado.httpserver
import tornado.ioloop
import tornado.web
import tornado.locale

'''
...
'''

if __name__ == '__main__':
    tornado.locale.set_default_locale('zh_CN')
    tornado.locale.load_gettext_translations('./locales', 'messages')
    server = tornado.httpserver.HTTPServer(application)
    server.listen(20000)
    loop = tornado.ioloop.IOLoop.instance()
    tornado.autoreload.start(loop)
    loop.start()

由于我用的ubuntu系統(tǒng),所以服務(wù)器端會(huì)被強(qiáng)制認(rèn)為使用en_US編碼,所以我作為調(diào)試,強(qiáng)制指定了set_default_locale('zh_CN'),然后使用tornado.locale.load_gettext_translations('./locales', 'messages')來讀取locales文件夾下的messages項(xiàng)目的mo文件。

第六步,在自己寫的Handler里面,加入locale.translate

class BaseHandler(tornado.web.RequestHandler):
    def get_current_user(self):
        _ = self.locale.translate
        user = self.get_secure_cookie('username')
        return user


class SigninHandler(BaseHandler):
    def get(self):
        self.render('User/sign_in.html')

    def post(self):
        username = self.get_argument('username')
        password = self.get_argument('password')
        if username == 'xianglei':
            self.set_secure_cookie('username', 'xianglei')
            self.redirect('/')


class SignoutHandler(BaseHandler):
    def get(self, *args, **kwargs):
        self.clear_all_cookies()
        self.redirect('/')

_=self.locale.translate,self.locale.translate實(shí)際是一個(gè)方法,那么把這個(gè)方法放到_這個(gè)對(duì)象里面,然后_方法會(huì)被自動(dòng)代入到模板中去執(zhí)行替換_("Sign in"),所以實(shí)際在模板里面寫的 {{ _("Sign in") }}實(shí)際上是讓Tornado執(zhí)行tornado.locale.translate()方法。這樣的話,如果我去掉之前的set_default_locale(),頁面顯示的就是英文的Sign in,加上,顯示的就是中文的登入。

同樣,Tornado也可以使用一個(gè)csv文件作為翻譯的基礎(chǔ)字典,默認(rèn)是采用csv方式的。

二、Tornado作為HTTP client執(zhí)行RESTful命令。

之前已經(jīng)記錄了Tornado異步的客戶端,昨天調(diào)試了一下用Tornado做HDFS和YARN的RESTful客戶端。HDFS的RESTful方式,不能使用異步,需要使用Tornado同步客戶端才可以。HDFS和YARN的RESTful管理方式需要用到HTTP的四種查詢方式,GET,POST,PUT,DELETE。其中PUT和DELETE的方式跟POST和GET很類似。

比如

class MakeDirectoryHandler(BaseHandler):
    @tornado.web.authenticated
    def post(self):
        host = self.get_argument('host')
        port = self.get_argument('port')
        directory = self.get_argument('directory')
        username = self.get_secure_cookie('username')
        base_url = 'http://'+host+':'+port+'/webhdfs/v1'+directory+'?op=MKDIRS&user.name='+username
        put_body = dict()
        put_body['op'] = 'MKDIRS'
        put_body['user.name'] = username
        put_body = urllib.urlencode(put_body)
        try:
            http = tornado.httpclient.HTTPClient()
            response = http.fetch(
                    tornado.httpclient.HTTPRequest(
                            url=base_url,
                            method='PUT',
                            body=put_body,
                    )
            )
            self.write(response.body)
        except tornado.httpclient.HTTPError, e:
            self.write('{"errcode":"'+str(e).replace('\n', '<br />')+'"}')

HDFS的MKDIRS方法放在PUT組里面,所以提交的參數(shù)需要用urlencode進(jìn)行編碼轉(zhuǎn)換后PUT給RESTful接口。

而DELETE則是。

class RemoveHandler(BaseHandler):
    @tornado.web.authenticated
    def post(self):
        host = self.get_argument('host')
        port = self.get_argument('port')
        filename = self.get_argument('filename')
        '''
        If recursive = true, it use to remove whole directory
        If recursive = false, it use to remove a file or an empty directory
        The argument must be string.
        '''
        recursive = self.get_argument('recursive')
        username = self.get_secure_cookie('username')
        base_url = 'http://'+host+':'+port+'/webhdfs/v1'+filename+'?op=DELETE&recursive='+recursive+'&user.name='+username
        try:
            http = tornado.httpclient.HTTPClient()
            response = http.fetch(
                    tornado.httpclient.HTTPRequest(
                            url=base_url,
                            method='DELETE',
                    )
            )
            self.write(response.body)
        except tornado.httpclient.HTTPError, e:
            self.write('{"errcode":"'+str(e).replace('\n', '<br />')+'"}')

跟GET方式一樣,DELETE不需要封裝傳遞參數(shù)。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

新聞名稱:Tornado學(xué)習(xí)筆記(四)-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://chinadenli.net/article22/dsjjcc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作微信公眾號(hào)、網(wǎng)站導(dǎo)航、響應(yīng)式網(wǎng)站網(wǎng)站收錄、自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)