Tornado學習筆記 四

2021-09-05 08:05:27 字數 4854 閱讀 1513

一、tornado的語言國際化方法

tornado做國際化折騰了一下下,tornado這部分的官方文件太poor了。所以自己記錄一下如何用tornado結合gettext做國際化。

第一步,在專案路徑下建立./locales/zh_cn/lc_messages資料夾。

第二步,使用xgettext或poedit在第一步的資料夾下建立乙個po檔案,比如messages.po,我用poedit建立,比xgettext方便一些。

第三步,編輯該messages.po檔案,當然,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是網頁裡原先的文字內容,msgstr是準備替換的內容。新內容直接用編輯器往後追加msgid和msgstr就可以了。

第四步,修改html網頁模板

html裡面的}等內容就是需要gettext查詢和替換的內容。

第五步,在tornado主檔案內新增gettext支援的方法。

loop.start()由於我用的ubuntu系統,所以伺服器端會被強制認為使用en_us編碼,所以我作為除錯,強制指定了set_default_locale('zh_cn'),然後使用tornado.locale.load_gettext_translations('./locales', 'messages')來讀取locales資料夾下的messages專案的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實際是乙個方法,那麼把這個方法放到_這個物件裡面,然後_方法會被自動代入到模板中去執行替換_("sign in"),所以實際在模板裡面寫的 }實際上是讓tornado執行tornado.locale.translate()方法。這樣的話,如果我去掉之前的set_default_locale(),頁面顯示的就是英文的sign in,加上,顯示的就是中文的登入。

同樣,tornado也可以使用乙個csv檔案作為翻譯的基礎字典,預設是採用csv方式的。

二、tornado作為http client執行restful命令。

之前已經記錄了tornado非同步的客戶端,昨天除錯了一下用tornado做hdfs和yarn的restful客戶端。hdfs的restful方式,不能使用非同步,需要使用tornado同步客戶端才可以。hdfs和yarn的restful管理方式需要用到http的四種查詢方式,get,post,put,delete。其中put和delete的方式跟post和get很類似。

比如

class makedirectoryhandler(basehandler):

self.write('')

hdfs的mkdirs方法放在put組裡面,所以提交的引數需要用urlencode進行編碼轉換後put給restful介面。

而delete則是。

self.write('')跟get方式一樣,delete不需要封裝傳遞引數。

Tornado學習筆記 四

一 tornado的語言國際化方法 tornado做國際化折騰了一下下,tornado這部分的官方文件太poor了。所以自己記錄一下如何用tornado結合gettext做國際化。第一步,在專案路徑下建立.locales zh cn lc messages資料夾。第二步,使用xgettext或poe...

tornado學習筆記

tornado是乙個python到開源web框架,它比django要輕量級到多,也沒有什麼元件,只有運用到對應到業務場景下我才使用這個框架,它是單程序單執行緒到非同步非阻塞模型,適用與長連線長輪巡,高併發,非同步非阻塞 安裝 pip install tornado view層 file views ...

Tornado學習筆記(1)

參考書籍 introduction to tornado 1.1 tornado是什麼?tornado是使用python編寫的乙個強大的 可擴充套件的web伺服器。它在處理嚴峻的網路流量時表現得足夠 強健,但卻在建立和編寫時有著足夠的輕量級,並能夠被用在大量的應用和工具中。此外,它還擁有處理安全性 ...