请求与响应
接受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应用
-
获取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')
)
- 执行方法类,继承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')
- 启动 监听IO实例
tornado.ioloop.IOLoop.current().start()
路由定义
-
第一种 不命名
tornado.web.Application(handlers=[(‘/days/(\d+)/(\d+)’,daysHandler)]
方法定义时的参数顺序与之一 一对应
def get(self,month,day) -
第二种 命名参数
?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('数据删除成功!')