tornado项目--day01--项目结构以及项目搭建编写

来源:互联网 发布:手机淘宝如何出售二手 编辑:程序博客网 时间:2024/06/03 17:53

一、项目结构:

​ 需求:易维护,可扩展

1、files 配置信息 (docs)
2、handlers 处理逻辑和路由映射 C控制层
3、libs 库文件 做一些中间层的封装 作用:解耦合
4、models 是模型类 M模型层 包括:数据库,文件系统,第三放服务
5、static 放js css html img
6、utils 小工具小组件,比如:验证码生成、IP地址转换
7、templates 放html页面
8、config 配置文件 要有两套 一套给开发用 一套给线上用
9、server 启动文件
10、requirement 所需依赖

二、总体思路

1、创建项目结构文件
2、编写配置文件以及运行文件
3、编写basehandler
4、数据库连接和redis连接编写
5、编写主handler 和main_handler_url
6、创建模板templates/index.html
7、运行python server.py -start 测试

三、目录结构

这里写图片描述


四、代码部分

所需依赖

appdirs==1.4.3futures==3.1.1netaddr==0.7.19packaging==16.8pbkdf2==1.3Pillow==4.1.0pkg-resources==0.0.0pycket==0.3.0PyMySQL==0.7.11pyparsing==2.2.0qiniu==7.1.2redis==2.10.5requests==2.14.2SQLAlchemy==1.1.9tornado==4.4.3torndb==0.3
1、配置文件
#coding=utf-8settings = dict(        template_path='templates', #设置模板路径        static_path='static', #设置静态文件路径        debug=True, #调试模式        cookie_secret='aaaa', #cookie加密方式        login_url='/auth/user_login', #auth  指定默认的路径        xsrf_cookies=True, #防止跨域攻击        #ui_methods=admin_uimethods,        #pycket配置信息        pycket={            'engine': 'redis',            'storage': {                'host': 'localhost',                'port': 6379,                'db_sessions': 5,                'db_notifications': 11,                'max_connections': 2 ** 31,            },            'cookies': {                'expires_days':30, #设置过期时间                #'max_age':5000,            }        })
2、启动文件
#coding=utf-8import tornado.httpserverimport tornado.webimport tornado.ioloopimport tornado.escapefrom tornado.options import define, optionsfrom config import settingsfrom handlers.main.main_urls import handlers#定义一个默认的接口define("port", default=8000, help="run port",type=int)define("start", default=False, help="start server", type=bool)if __name__ == "__main__":    options.parse_command_line()    if options.start:        app = tornado.web.Application(handlers, **settings) #创建应用实例        http_server = tornado.httpserver.HTTPServer(app) #通过应用实例创建服务器实例        http_server.listen(options.port) #监听端口        print 'start server...'        tornado.ioloop.IOLoop.instance().start() #启动服务
3、数据库连接配置
#coding=utf-8from sqlalchemy import create_enginefrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy.orm import sessionmaker# 连接数据库的数据HOSTNAME = '192.168.169.138'PORT = '3306'DATABASE = 'tornado_pro'USERNAME = 'developer'PASSWORD = '123456'# DB_URI的格式:dialect(mysql/sqlite)+driver://username:password@host:port/database?charset=utf8DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME,                                                              PASSWORD,                                                              HOSTNAME,                                                              PORT,                                                              DATABASE                                                              )# 1创建一个engine引擎engine = create_engine(DB_URI, echo=False )# 2sessionmaker生成一个session类Session = sessionmaker(bind=engine)# 3创建一个session实例dbSession = Session()# 4创建一个模型基类Base = declarative_base(engine)
4、redis连接
#coding=utf-8import redisconn = redis.Redis()
5、初始化 BaseHandler
1、继承tornado.web.RequestHandler, SessionMixin2、创建数据库和redis的连接实例3、重写方法get_current_user(self) 如果要使用authenticated方法4、清除连接实例中的数据#coding=utf-8import tornado.escapefrom libs.pycket.session import SessionMixinfrom libs.db.dbsession import dbSessionfrom libs.redis_conn.redis_conn import connfrom models.account.account_user_model import Userusers = {    'user': User}class BaseHandler(tornado.web.RequestHandler, SessionMixin):    def initialize(self):  #初始化连接  db为mysql的数据库连接实例  conn为redis的连接实例        self.db=dbSession        self.conn=conn    def get_current_user(self):  #重写方法 如果要使用authenticated方法        """获取当前用户"""        username = self.session.get("user_name")        if username:            user = users[username['user_tablename']].by_id(username['user_id'])            return user if user else None        else:            return None    def on_finish(self):  #清除连接中的数据        self.db.close()
6、编写main_handler
#coding=utf-8import tornado.webfrom handlers.base.base_handler import BaseHandlerclass MainHandler(BaseHandler):    @tornado.web.authenticated    def get(self):        self.render('index.html')

7、编写main_handler_url

from main_handler import MainHandlerhandlers = [    (r'/',MainHandler),]
原创粉丝点击