tornado 表單驗(yàn)證 套接字 長(zhǎng)連接

manage

import tornado.web
import tornado.ioloop
from tornado_jinja2 import Jinja2Loader

from app.views import RegisterHandler, LoginHandler, HomeHandler, \
    ManyChatHandler, ChatHandler


# 配置 jinjia2 的模板語(yǔ)法
jinjia2loader = Jinja2Loader('templates')


def make_app():
    return tornado.web.Application(handlers=[
        (r'/register/', RegisterHandler),
        (r'/login/', LoginHandler),
        (r'/home/', HomeHandler),
        (r'/many_chat/', ManyChatHandler),
        (r'/chat/', ChatHandler),

    ],
        template_path='templates',
        static_path='static',
        cookie_secret='adsffsadfagaioewra',
        template_loader=jinjia2loader,
    )


if __name__ == '__main__':
    app = make_app()
    app.listen(8000)
    tornado.ioloop.IOLoop.current().start()

views

import tornado.web
import tornado.websocket


from app.forms import UserRegisterForm


class RegisterHandler(tornado.web.RequestHandler):

    def get(self, *args, **kwargs):

        self.render('register.html')

    def post(self, *args, **kwargs):
        # 使用表單做校驗(yàn),校驗(yàn)注冊(cè)的參數(shù)長(zhǎng)度,是否為空戏罢。
        form = UserRegisterForm()
        if form.is_valid(self):
            print(form.clean_data)
            print(form.errors)
            self.write('校驗(yàn)成功')
        else:
            print(form.errors)
            self.write('校驗(yàn)失敗')


class LoginHandler(tornado.web.RequestHandler):

    def get(self, *args, **kwargs):
        self.render('login.html')

    def post(self, *args, **kwargs):
        form = UserRegisterForm()
        if form.is_valid(self):
            users = ['coco123', 'caozhihua']
            if form.clean_data['account'] in users:
                # 演示模擬登錄
                self.set_secure_cookie('account',
                                       form.clean_data['account'], expires_days=1)
                self.redirect('/home/')
                return
        self.render('login.html', errors=form.errors)


class HomeHandler(tornado.web.RequestHandler):

    def get(self, *args, **kwargs):

        self.render('home.html')


class ManyChatHandler(tornado.web.RequestHandler):

    def get(self, *args, **kwargs):
        self.render('chat.html')


class ChatHandler(tornado.websocket.WebSocketHandler):

    online_user = []

    # 建立連接時(shí)會(huì)默認(rèn)調(diào)用的方法
    def open(self, *args, **kwargs):

        # 將進(jìn)入聊天室的用戶保存起來(lái)
        self.online_user.append(self)
        # write_message(信息)讯沈, 用于將寫(xiě)入的信息返回給前端汞斧,前端通過(guò)on_message接收
        account = self.get_secure_cookie('account').decode('utf8')
        for user in self.online_user:
            user.write_message('系統(tǒng)提示:%s已登錄系統(tǒng)' % account)

    # 前端調(diào)用send(內(nèi)容),后端調(diào)用on_message方法迎吵,用于接收前端傳遞的數(shù)
    def on_message(self, message):

        # 將一個(gè)用戶發(fā)送的消息廣播給進(jìn)入聊天室的用戶
        for user in self.online_user:
            if user != self:
                # 給其他用戶廣播某個(gè)用戶發(fā)送的消息
                account = self.get_secure_cookie('account').decode('utf8')
                user.write_message('{}說(shuō):{}'.format(account, message))

    # 退出連接時(shí)氨距,主動(dòng)調(diào)用
    def on_close(self):
        # 將退出聊天的用戶移除online_user
        self.online_user.remove(self)
        for user in self.online_user:
            account = self.get_secure_cookie('account').decode('utf8')
            user.write_message('系統(tǒng)提示:{}已退出系統(tǒng)'.format(account))

froms

import re

class UserRegisterForm():

    def __init__(self):
        # 定義校驗(yàn)字段的規(guī)則
        self.account = '[0-9a-zA-Z]{5,10}'
        self.password = '[0-9]{5,10}'
        self.password2 = '[0-9]{5,10}'
        self.errors = {}
        self.clean_data = {}

    def is_valid(self, request):
        # 校驗(yàn)字段
        flag = True
        print(self.__dict__)
        for key, value in self.__dict__.items():

            html_value = request.get_argument(key, None)
            if html_value:
                # 正則匹配
                if not re.match(value,html_value):
                    # 表示字段不符合規(guī)則
                    self.errors[key] = '{}字段校驗(yàn)錯(cuò)誤'.format(key)
                    flag = False
                self.clean_data[key] = html_value
        return flag
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蜒谤,隨后出現(xiàn)的幾起案子山宾,更是在濱河造成了極大的恐慌,老刑警劉巖鳍徽,帶你破解...
    沈念sama閱讀 221,406評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件资锰,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡旬盯,警方通過(guò)查閱死者的電腦和手機(jī)台妆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)胖翰,“玉大人接剩,你說(shuō)我怎么就攤上這事∪龋” “怎么了懊缺?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,815評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)培他。 經(jīng)常有香客問(wèn)我鹃两,道長(zhǎng),這世上最難降的妖魔是什么舀凛? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,537評(píng)論 1 296
  • 正文 為了忘掉前任俊扳,我火速辦了婚禮,結(jié)果婚禮上猛遍,老公的妹妹穿的比我還像新娘馋记。我一直安慰自己号坡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布梯醒。 她就那樣靜靜地躺著宽堆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪茸习。 梳的紋絲不亂的頭發(fā)上畜隶,一...
    開(kāi)封第一講書(shū)人閱讀 52,184評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音号胚,去河邊找鬼籽慢。 笑死,一個(gè)胖子當(dāng)著我的面吹牛涕刚,可吹牛的內(nèi)容都是我干的嗡综。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼杜漠,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼极景!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起驾茴,我...
    開(kāi)封第一講書(shū)人閱讀 39,668評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤盼樟,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后锈至,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體晨缴,經(jīng)...
    沈念sama閱讀 46,212評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評(píng)論 3 340
  • 正文 我和宋清朗相戀三年峡捡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了击碗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,438評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡们拙,死狀恐怖稍途,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情砚婆,我是刑警寧澤械拍,帶...
    沈念sama閱讀 36,128評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站装盯,受9級(jí)特大地震影響坷虑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜埂奈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評(píng)論 3 333
  • 文/蒙蒙 一迄损、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧账磺,春花似錦海蔽、人聲如沸共屈。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,279評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至借宵,卻和暖如春幌衣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背壤玫。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,395評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工豁护, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人欲间。 一個(gè)月前我還...
    沈念sama閱讀 48,827評(píng)論 3 376
  • 正文 我出身青樓楚里,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親猎贴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子班缎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評(píng)論 2 359

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

  • ViewsBecause view objects are the main way your applicati...
    梁光飛閱讀 606評(píng)論 0 0
  • 1.安裝虛擬環(huán)境 pip install virtualenvwrapper 安裝完之后設(shè)置一下環(huán)境變量WORK_...
    假裝我不帥閱讀 1,536評(píng)論 0 0
  • PythonWeb框架要點(diǎn)、Django介紹她渴、工程搭建达址、配置、靜態(tài)文件與路由 1.Python Web 框架要點(diǎn) ...
    Cestine閱讀 1,508評(píng)論 0 6
  • 1.本地環(huán)境 PHP環(huán)境:PHP5.4N Joomla版本:3.0+ 2.所需組件 在Joomla的拓展市場(chǎng)中或在...
    lamtank閱讀 759評(píng)論 0 0
  • 今天中午趁耗,同學(xué)們吃完飯開(kāi)始安靜的寫(xiě)作業(yè)沉唠。 今天的天氣特別晴朗,前幾日的濕冷一見(jiàn)陽(yáng)光跑的無(wú)影無(wú)蹤苛败。燦爛的陽(yáng)光照在身上...
    一路荷香閱讀 745評(píng)論 0 1