美文网首页
Day2 tornado模型与模板

Day2 tornado模型与模板

作者: ququququ | 来源:发表于2019-03-13 20:14 被阅读0次

    一、模型

    1、准备
    from sqlalchemy import create_engine
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column, Integer, String
    
    from sqlalchemy.orm import sessionmaker
    
    2、配置
    db_url = 'mysql+pymysql://root:123456@127.0.0.1:3306/tornado9'
    
    # 创建引擎建立连接
    engine = create_engine(db_url)
    
    # 模型与数据库表关联的基类,模型必须继承于Base
    Base = declarative_base(bind=engine)
    
    # 创建session会话
    DbSession = sessionmaker(bind=engine)
    session = DbSession()
    
    def create_db():
        # 映射模型对应的表
        Base.metadata.create_all()
    
    def drop_db():
        # 删除模型映射表
        Base.metadata.drop_all()
    
    class Student(Base):
        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'
    
    3、使用
    #增
    stu = Student()
    stu.s_name = 'xiaoming'
    stus.append(stu)
    session.add_all(stus)
    session.commit()
    
    #删
    session.delete(stu)
    session.commit()
    
    #改
    stu.s_name = 'xiaohua'
    session.add(stu)
    session.commit()
    
    #查
    #方法一:
    stu = session.query(Student).filter(Student.s_name == 'xiaoming_1').first()
    #方法二:
    stus = session.query(Student).filter_by(s_name = 'xiaoming_0').all()
    

    manage.py

    import os
    
    import tornado.web
    import tornado.ioloop
    from tornado.options import define, options, parse_command_line
    
    from app.views import IndexHandler, XindexHandler, DbHandler, DropDbHandler, AddStuHandler, StusHandler
    
    # 设置默认端口
    define('port', default=80, type=int)
    
    
    def make_app():
        return tornado.web.Application(handlers=[
            (r'/', IndexHandler),
            (r'/xindex/', XindexHandler),
            (r'/init_db/', DbHandler),
            (r'/drop_db/', DropDbHandler),
            (r'/add_stu/', AddStuHandler),
            (r'/stus/', StusHandler)
        ],
        # 指定参数表示文件在templates
        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__':
        # 解析命令行
        parse_command_line()
        # 生成Application对象
        app = make_app()
        # 监听端口
        app.listen(options.port)
        # 启动
        tornado.ioloop.IOLoop.current().start()
    

    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):
        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'
    

    utils/conn.py

    
    from sqlalchemy import create_engine
    from sqlalchemy.ext.declarative import declarative_base
    
    from sqlalchemy.orm import sessionmaker
    
    # 练级数据库格式
    # mysql+pymysql://root:123456@127.0.0.1:3306/tornado9
    
    db_url = 'mysql+pymysql://root:123456@127.0.0.1:3306/tornado9'
    
    # 创建引擎建立连接
    engine = create_engine(db_url)
    
    # 模型与数据库表关联的基类,模型必须继承于Base
    Base = declarative_base(bind=engine)
    
    # 创建session会话
    DbSession = sessionmaker(bind=engine)
    session = DbSession()
    
    
    

    app/views.py

    from sqlalchemy import create_engine
    from sqlalchemy.ext.declarative import declarative_base
    
    from sqlalchemy.orm import sessionmaker
    
    #  连接数据库格式
    # mysql+pymysql://root:123456@127.0.0.1:3306/tornado9
    
    db_url = 'mysql+pymysql://root:123456@127.0.0.1:3306/tornado9'
    
    # 创建引擎建立连接
    engine = create_engine(db_url)
    
    # 模型与数据库表关联的基类,模型必须继承于Base
    Base = declarative_base(bind=engine)
    
    # 创建session会话
    DbSession = sessionmaker(bind=engine)
    session = DbSession()
    

    二、HTTP行为方法

    方法 说明
    GET 用于获取数据
    POST 用于创建数据
    PUT 修改某个对象的全部属性
    PATCH 修改某个对象的部分属性
    DELETE 删除数据

    三、模板

    1、模板文件路径定义:Application(handlers=[], template_path='指定template文件夹的路径')

    2、获取templates路径 os.patch.join(os.path.dirname(os.path.abspath(__file__)), 'templates')

    3、挖坑 {% block name %} {% end %}注意:这里和Flask的jinja2有区别。

    4、继承{% extends '父模板名称' %}

    5、模板语法

    {# 我是注释! #}
    {% block content %}
        <p>(。◕ˇ∀ˇ◕)</p>
        <select>
            {% for item in items %}
            <option {% if item == "Php" %} selected {% end %}>{{ item }}</option>
            {% end %}
        </select>
    
        {% for score in scores %}
            {% if score > 60 %}
                <p style="color:red;">{{ score }}</p>
            {% elif score < 10 %}
                <p style="color:green;">{{ score }}</p>
            {% else %}
                <p>{{ score }}</p>
            {% end %}
        {% end %}
    
    
        {% while len(items) %}
            <p>{{ items.pop() }}</p>
        {% end %}
    
        {% try %}
            <p>{{ item[10] }}</p>
        {% except %}
            <p>下标越界</p>
        {% finally %}
            <p>必须执行操作</p>
        {% end %}
    
        {% set n=1 %}
        <p>{{ n }}</p>
    {% end %}
    

    相关文章

      网友评论

          本文标题:Day2 tornado模型与模板

          本文链接:https://www.haomeiwen.com/subject/mwqxmqtx.html