Tornado学习

请求与响应

接受get传递参数:

  • self.get_argument(name)
  • self.get_arguments(name)
  • self.get_query_argument(name)
  • self.get_query_arguments(name)

接受post传参:

  • self.get_argument(name)
  • self.get_arguments(name)
  • self.get_body_argument(name)
  • self.get_body_arguments(name)

命令行

# 定义启动端口
define('port',default=8080,type=int)
# 解析启动命令 python xxx.py --port=端口号
parse_command_line()
# 监听端口 获取命令行中的port参数
app.listen(options.port)
#启动命令
python xxx.py --port=端口号

tornado应用

  1. 获取tornado.web.Application对象
    (1)handlers=[(访问路由,执行方法)]
    template_path=模板路径
    static_path=静态资源路径(导入静态文件:
    href=‘/static/css/xxx.css’ 或
    {{static_url(‘css/xxx.css’)}}

    (2)监听端口:Application对象.listen(端口)

# 路由处理
def make_app():
    # handlers参数中定义路由匹配地址
    return tornado.web.Application(handlers=[

        (r'/',MainHandler),
        (r'/admin', EntryHandler),
        (r'/index',IndexHandler)
    ],template_path=os.path.join(os.path.dirname(os.path.abspath(__file__)),'template')
    )
  1. 执行方法类,继承tornado.web.RequestHandler
    定义get、post方法
class MainHandler(tornado.web.RequestHandler):
    # 渲染相应给浏览器的数据
         # 匹配get方法
     def get(self):
         self.write('hello,tornado')

        # 匹配post方法
     def post(self):
         self.write('hello post')
  1. 启动 监听IO实例
    tornado.ioloop.IOLoop.current().start()

路由定义

  1. 第一种 不命名
    tornado.web.Application(handlers=[(‘/days/(\d+)/(\d+)’,daysHandler)]
    方法定义时的参数顺序与之一 一对应
    def get(self,month,day)

  2. 第二种 命名参数
    ?P<paramterName> 正则

 	 tornado.web.Application(handlers=[('/days/(?P <name> \d+)/(?P <name2> \d+)',daysHandler)]
 	 #与命名参数相对应
 	 def get(self,name2,name)

切入点函数(以数据库连接为例)

1、def initialize 自动执行
2、def on_finish

class EntryHandler(tornado.web.RequestHandler):
    def initialize(self):
        self.conn=pymysql.Connect(host='127.0.0.1',password='root',database='market',user='root',port=3306)
        self.cursor=self.conn.cursor()
        print('initialize')
    def get(self):
        print('get')
        sql='select * from admin'
        self.cursor.execute(sql)
        data=self.cursor.fetchall()
        print(data)
        self.write('查询数据')
        # self.redirect('/')
    def post(self):
        pass
    def on_finish(self):
        print('on_finish')
        self.conn.close()

模板

父模板

挖坑:{% block name %} {% end %}

子模板

继承:{% extends ‘父模板名称’ %}

模板语法

标签 {% 标签名%} {%end%}

  • while标签 {% while条件 %} {%end%}
  • for标签 {% for 变量 in [] %} {%end%}
  • set 标签 {% set 变量=值 %} 可设置一个变量

变量:{{变量名}}

注解{#注解内容#}

数据库连接

1.conn.py

# 连接数据库的格式
# mysql+pymysql://root:root@127.0.0.1:3306/数据库名
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

db_url='mysql+pymysql://root:root@127.0.0.1:3306/sys'

# 1、创建引擎,建立连接
engine=create_engine(db_url)

# 2、模型与数据库的表进行关联的基类,Model必须继承于Base
Base=declarative_base(engine)

# 3、创建session会话
DbSession=sessionmaker(bind=engine)
session=DbSession()

2、Model

from sqlalchemy import Column,Integer,String

from utils.conn import Base
#创建表
def create_db():
    Base.metadata.create_all()

class Student(Base):
    # 主键自增int类型的id主键
    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、Handler

class StuHandler(tornado.web.RequestHandler):
    def get(self):
        # .all是返回一个列表
        # res=session.query(Student).filter(Student.s_name=='xzc').all()
        res=session.query(Student).filter_by(s_name='xzc').all()
        print(res)
        self.write('查询数据成功!')

    def delete(self):
        # 第一种方法 session.delete(stu)
        # stu=session.query(Student).filter(Student.s_name=='xzc').first()
        # session.delete(stu)

        # 第二种方法 调用delete()
        session.query(Student).filter(Student.s_name=='xzc').delete()
        session.commit()
        self.write('数据删除成功!')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值