• tornado框架


    tornado图片:百度脑图

    manage.py    启动文件

    import os
    import tornado.web
    import tornado.ioloop
    from tornado.options import define, options, parse_command_line
    from app.views import IndexHandler
    from app.views import XindexHandler
    from app.views import DbHandler
    from app.views import DropDbHandler
    from app.views import AddStuHandler
    from app.views import StusHandler
    
    # 定义默认的启动端口port为80
    define('port', default=8080, type=int)
    
    def make_app():
        # handlers参数中定义路由匹配地址
        return tornado.web.Application(handlers=[
            (r'/index/', IndexHandler),
            (r'/xindex/',XindexHandler),
            (r'/init_db/', DbHandler),
            (r'/drop_db/', DropDbHandler),
            (r'/add_stu/', AddStuHandler),
            (r'/stus/', StusHandler)
        ],
        # 模板文件
        template_path=os.path.join(os.path.dirname(os.path.abspath(__file__)),'templates'),
        # 静态文件
        static_path=os.path.join(os.path.dirname(os.path.abspath(__file__)),'static')
        )
    if __name__ == '__main__':
        # 解析启动命令  python xxx.py --port=端口号
        parse_command_line()
        # 启动/生成Application对象
        app = make_app()
        # 监听端口
        app.listen(options.port)
        # 监听启动的IO实例
        tornado.ioloop.IOLoop.current().start()

    app/views.py   视图文件

    import tornado.web
    from app.models import create_db
    from app.models import drop_db
    from utils.conn import session
    from app.models import Student
    from sqlalchemy import not_, or_, and_
    
    class IndexHandler(tornado.web.RequestHandler):
        def get(self):
            self.write('hello day2 tornado')
    
    class XindexHandler(tornado.web.RequestHandler):
        def get(self):
            # 页面渲染
            items = ['Python', 'Php', 'C++', '精通']
            self.render('index.html',items=items)
    
    class DbHandler(tornado.web.RequestHandler):
        def get(self):
            create_db()
            self.write('创建表成功')
    
    
    class DropDbHandler(tornado.web.RequestHandler):
        def get(self):
            drop_db()
            self.write('删除表成功')
    
    class AddStuHandler(tornado.web.RequestHandler):
        def post(self):
            # 创建单条数据
            # stu = Student()
            # stu.s_name = '大爷灰'
            # session.add(stu)
            # session.commit()
    
            # 创建多条数据
            stus = []
            for i in range(10):
                stu = Student()
                stu.s_name = '大爷灰_%s' % i
                stus.append(stu)
    
            session.add_all(stus)
            session.commit()
            self.write('新增数据成功')
    
    class StusHandler(tornado.web.RequestHandler):
        def get(self):
            # stu = session.query(Student).filter(Student.s_name == '大爷灰').all()
            stu = session.query(Student).filter_by(s_name = '大爷灰').all()
            print(stu)
            self.write('查询数据成功')
    
        def delete(self):
            # 实现删除,第一种,session.delete()
            stu = session.query(Student).filter_by(s_name = '大爷灰').first()
            if stu:
                session.delete(stu)
                session.commit()
    
            # 第二种, 调用delete()方法
            session.query(Student).filter(Student.s_name == '大爷灰_1').delete()
            session.commit()
    
            self.write('删除成功')
    
        def patch(self):
            # 实现修改部分的属性
            # 第一种方法
            # stu = session.query(Student).filter(Student.s_name == '大爷灰_0').first()
            # stu.s_name = '大爷灰'
            # session.add(stu)
            # session.commit()
    
            # 第二种方法
            session.query(Student).filter(Student.s_name == '大爷灰_2').update({'s_name':'赵大爷'})
            session.commit()
            self.write('修改数据成功')

    templates/index.html   模板文件

    {% extends 'base.html' %}
    
    {% block css %}
    <!--第一种加载方式:直接定义静态文件的路径-->
    <!--<link rel="stylesheet" href="/static/css/style.css">-->
    
    <!--第二种加载方式-->
    <link rel="stylesheet" href="{{ static_url('css/style.css')}}">
    
    {% end %}
    
    {% block content %}
        <p>好开心</p>
        <!-- 变量的解析, 使用{# {{ 变量名 }} #}-->
        {{ items }}
    
        {# for标签,使用{% for %} {% end %} #}
    
        {% for i in items %}
            {% if i == 'Python' %}
                <p style="color:red;">{{ i }}</p>
            {% elif i == 'Php' %}
                <p style="color:green;">{{ i }}</p>
            {% else %}
                <p>{{ i }}</p>
            {% end %}
        {% end %}
    
        {{ items[0] }}
    
        {% while len(items) %}
            <p>{{ items.pop() }}</p>
        {% end %}
    
        <!--如果通过下标取items的元素,如果下标超过了items的长度-->
        {% try %}
            <p>{{ items[0] }}</p>
        {% except %}
            <p>下标越界</p>
        {% finally %}
            <p>必须执行的操作</p>
        {% end %}
    
        {% set n=1 %}
        <p>{{ n }}</p>
    
    {% end %}

    templates/base.html   模板文件

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>
            {% block title %}
            {% end %}
        </title>
        {% block css %}
        {% end %}
    
        {% block js %}
        {% end %}
    </head>
    <body>
            {% block content %}
            {% end %}
    </body>
    </html>

    static/css/style.css     静态文件

    p {
        font-weight: bold;
        font-family: '微软雅黑';
        font-size: 20px;
    }

    app.models.py    模型表

    from sqlalchemy import Column, Integer, String
    from utils.conn import Base
    
    def create_db():
        # 创建模型映射的表
        Base.metadata.create_all()
    
    def drop_db():
        # 删除模型映射的表
        Base.metadata.drop_all()
    
    class Student(Base):
        # 定义自增,int类型的主键
        id = Column(Integer, primary_key=True, autoincrement=True)
        # 定义不能为空的唯一姓名字段
        s_name = Column(String(10), unique=True, nullable=False)
        s_age = Column(Integer,default=18)
    
        __tablename__ = 'student'
    
        # def repr(self):
            

    utils/conn.py   连接数据库

    from sqlalchemy import create_engine
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy.orm import sessionmaker
    # 连接数据库
    # mysql+pymysql://root:12345@127.0.0.1:3306/tornado9
    
    db_url = 'mysql+pymysql://root:123@127.0.0.1:3306/tornado9'
    
    # 创建引擎,建立连接
    engine = create_engine(db_url)
    # 模型与数据库表进行关联的基类,模型必须继承Base
    Base = declarative_base(bind=engine)
    
    # 创建session会话
    DbSession = sessionmaker(bind=engine)
    session = DbSession()
    dayehui
  • 相关阅读:
    compass 制作css sprites
    net模块
    javascript -- 代理模式
    javascript -- 单例模式
    js 对象的浅拷贝和深拷贝
    js 对象的封装,继承,多态的理解
    this,call,apply
    flex 实现圣杯布局
    ubuntu中安装mongodb
    devDependencies和dependencies的区别
  • 原文地址:https://www.cnblogs.com/zrh-960906/p/12188799.html
Copyright © 2020-2023  润新知