日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Tornado框架

發布時間:2023/11/27 生活经验 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Tornado框架 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Tornado介紹

Tornado?是?FriendFeed?使用的可擴展的異步非阻塞式?web?服務器及其相關工具的開源版本。這個?Web?框架看起來有些像web.py(豆瓣用這個寫的) 或者?Google?的?webapp,不過為了能有效利用非阻塞式服務器環境,這個?Web?框架還包含了一些相關的有用工具?和優化。

Tornado?和現在的主流?Web?服務器框架(包括大多數?Python?的框架)有著明顯的區別:它是非阻塞式服務器,而且速度相當快。得利于其?非阻塞的方式和對?epoll?的運用,Tornado?每秒可以處理數以千計的連接,這意味著對于實時?Web?服務來說,Tornado?是一個理想的?Web?框架。我們開發這個?Web?服務器的主要目的就是為了處理?FriendFeed?的實時功能?——在?FriendFeed?的應用里每一個活動用戶都會保持著一個服務器連接。(關于如何擴容?服務器,以處理數以千計的客戶端的連接的問題,請參閱?C10K?problem。)


基本使用?

12345678910111213141516171819#!/usr/bin/env python# -*- coding:utf-8 -*-???import tornado.ioloopimport tornado.web??????class MainHandler(tornado.web.RequestHandler):????def get(self): ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #根據請求method,通過反射找到get方法;????????self.write("Hello, world")???application = tornado.web.Application([????(r"/index", MainHandler), ? ? ? ? ? ? ? ? ? ?#一個映射對應一個類])??????if __name__ == "__main__":????application.listen(8888) ? ? ? ? ? ? ? ? ? ? #socket????tornado.ioloop.IOLoop.instance().start()

第一步:執行腳本,監聽?8888?端口

第二步:瀏覽器客戶端訪問?/index??-->??http://127.0.0.1:8888/index

第三步:服務器接受請求,并交由對應的類處理該請求

第四步:類接受到請求之后,根據請求方式(post?/?get?/?delete?...)的不同調用并執行相應的方法

第五步:方法返回值的字符串內容發送瀏覽器


詳細介紹

一、路由系統?

路由系統其實就是?url?和?類?的對應關系,這里不同于其他框架,其他很多框架均是?url?對應?函數,Tornado中每個url對應的是一個類

12345678910111213141516171819202122232425262728293031#!/usr/bin/env python# -*- coding:utf-8 -*-???import tornado.ioloopimport tornado.web??????class MainHandler(tornado.web.RequestHandler):????def get(self):????????self.write("Hello, world")???class StoryHandler(tornado.web.RequestHandler):????def get(self, story_id):????????self.write("You requested the story " + story_id)???class BuyHandler(tornado.web.RequestHandler):????def get(self):????????self.write("buy.wupeiqi.com/index")???application = tornado.web.Application([????(r"/index", MainHandler),????(r"/story/([0-9]+)", StoryHandler),])???application.add_handlers('buy.wupeiqi.com$', [????(r'/index',BuyHandler),])???if __name__ == "__main__":????application.listen(80)????tornado.ioloop.IOLoop.instance().start()

二、模板

三、實用功能

四、擴展功能

1、自定義session

2、自定義模型綁定

表單提交驗證

用戶輸入與對象正則表達式的字段進行匹配,沒錯誤返回True。

template/index.html

12345678910111213141516171819<!DOCTYPE html><html><head lang="en">????<meta charset="UTF-8">????<title></title>????<link href="{{static_url("commons.css")}}" rel="stylesheet" /></head><body>????<h1>hello</h1>????<form action="/index" method="post">????????<p>hostname: <input type="text" name="host" /> </p>????????<p>ip: <input type="text" name="ip" /> </p>????????<p>port: <input type="text" name="port" /> </p>????????<p>phone: <input type="text" name="phone" /> </p>????????<input type="submit" />????</form></body></html>

index.py

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152#!/usr/bin/env python# -*- coding:utf-8 -*-???import tornado.ioloopimport tornado.webimport re??????class MainForm(object):????def __init__(self):????????self.host = "(.*)"????????self.ip = "^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}$"????????self.port = '(\d+)'????????self.phone = '^1[3|4|5|8][0-9]\d{8}$'???????def check_valid(self, request):????????form_dict = self.__dict__?? #獲取這個對象的所有字段????????for key, regular in form_dict.items():????????????post_value = request.get_argument(key)????????????#get_argument()是request方法,獲取html表單中name就是key,所以這個字段名稱和name最好對應????????????# 讓提交的數據 和 定義的正則表達式進行匹配,只能用match,從頭匹配????????????ret = re.match(regular, post_value)????????????if not ret:????????????????return False????????return True??????class MainHandler(tornado.web.RequestHandler):????def get(self):????????self.render('index.html',name="test")????def post(self, *args, **kwargs):????????obj = MainForm()????????result = obj.check_valid(self)????????print result??? #全部輸入正確就是True????????self.write('ok')?????????settings = {????'template_path': 'template',????'static_path': 'static',????'static_url_prefix': '/static/',}???application = tornado.web.Application([????(r"/index", MainHandler),], **settings)????? #路由系統,應用配置settings,靜態文件會去template目錄里找;??????if __name__ == "__main__":????application.listen(8888)????tornado.ioloop.IOLoop.instance().start()




























來自為知筆記(Wiz)

轉載于:https://www.cnblogs.com/daliangtou/p/5370873.html

總結

以上是生活随笔為你收集整理的Tornado框架的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。