tornado的用戶指南的使用總結和一個 tornado程序示例

 

 tornado程序示例


# coding:utf-8
import tornado.web
import tornado.ioloop
import tornado.httpserver
import tornado.options
from tornado.options import options, define
from tornado.web import url, RequestHandler
import os


database_config=dict(    engine=None,
    # engine_url='postgresql+psycopg2://mhq:1qaz2wsx@localhost:5432/blog',
    # 如果是使用mysql+mysqldb,在確認所有的庫表列都是uft8編碼後,依然有字符編碼報錯,
    # 可以嘗試在該url末尾加上queryString charset=utf8
    engine_url='sqlite:////root/ceph-manager.db',
    engine_setting=dict(
        echo=True,
        echo_pool=False,
        pool_recycle=25200,
        connect_args={'check_same_thread': False},

    ))
redis_session_config=dict(
    db_no=0,
    host="127.0.0.1",
    port=6379,
    password=None,
    max_connections=10,
    session_key_name='session_key_name',
    session_expires_days=7,
)
# 站點相關配置以及tornado的相關參數
config = dict(
    debug=False,
    database=database_config,
    redis_session=redis_session_config,
    application=None,  # 項目啓動後會在這裏註冊整個server,以便在需要的地方調用,勿修改
)
settings = dict(
    template_path=os.path.join(os.path.dirname(__file__), "template"),
    static_path=os.path.join(os.path.dirname(__file__), "static"),
    compress_response=config['compress_response'],
    xsrf_cookies=config['xsrf_cookies'],
    cookie_secret=config['cookie_secret'],
    login_url=config['login_url'],
    debug=config['debug'],
)

from sqlalchemy.orm import contains_eager, deferred
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, DateTime, Integer, String, Boolean, Text, ForeignKey, BigInteger, DATE
from sqlalchemy.orm import relationship, backref
DbBase = declarative_base()
class Plugin(DbBase):
    __tablename__ = 'plugins'
    id = Column(Integer, primary_key=True)
    title = Column(String(64), unique=True)
    note = Column(Text, default='')
    content = Column(Text, default='')
    order = Column(Integer, index=True, default=0)
    disabled = Column(Boolean, default=False)

    def __repr__(self):
        return '<Plugin %r>' % self.title
# sqlalchemy連接池配置以及生成鏈接池工廠實例
def db_poll_init():
    from sqlalchemy import create_engine
    from sqlalchemy.orm import sessionmaker
    engine_config = config['database']['engine_url']
    engine = create_engine(engine_config, **config['database']["engine_setting"])
    config['database']['engine'] = engine
    db_poll = sessionmaker(bind=engine)
    return db_poll

define("port", default=8000, type=int, help="run server on the given port.")

class IndexHandler(RequestHandler):
    def get(self):
        python_url = self.reverse_url("python_url")
        self.write('<a href="%s">itcast</a>' % python_url)

'''
調用順序
set_default_headers()
initialize()
prepare()
HTTP方法
set_default_headers()
write_error()
on_finish()
'''
class ItcastHandler(RequestHandler):
    def initialize(self, subject):
        self.subject = subject

    def get(self, name):
        self.write(self.subject)

    def post(self):
        self.get_argument("author_name", default="liudehua", strip=True)
        obj = Plugin(3,"classname")
        session.add(obj)
        session.commit()
        plugins = session.query(Plugin).order_by(Plugin.order.asc()).all()
        self.render("class.html", base_url=self.reverse_url('index'),pager="A4")

    def sort_up(db_session, plugin_id):
        plugin = db_session.query(Plugin).get(plugin_id)
        if plugin:
            plugin_up = db_session.query(Plugin).\
                filter(Plugin.order < plugin.order).order_by(Plugin.order.desc()).first()
            if plugin_up:
                order_tmp = plugin.order
                plugin.order = plugin_up.order
                plugin_up.order = order_tmp
                db_session.commit()
                return True
        return False

if __name__ == "__main__":
    tornado.options.parse_command_line()
    db = db_poll_init()
    session = db()
    app = tornado.web.Application([
            (r"/", IndexHandler),
            (r"/(cpp|c++)", ItcastHandler, {"subject":"c++"}),
            url(r"/python", ItcastHandler, {"subject":"python"}, name="python_url")
        ],**settings)
    http_server = tornado.httpserver.HTTPServer(app)
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.current().start()
from tornado.web import url, RequestHandler
RequestHandler.set_secure_cookie(self.session_manager.session_key_name, self.session_id,
                                       expires_days=self.session_manager.session_expires_days)設置cookie
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章