Tornado 新建一个项目
tornado 项目结构
1.app下面的__init__.py \user_show.py
from tornado. web import RequestHandler
import tornado. web
from mylib. db import Base
from mylib. db import get_db_conn
class Application ( tornado. web. Application) :
def __init__ ( self, * args, ** kwargs) :
super ( Application, self) . __init__( * args, ** kwargs)
self. db = get_db_conn( Base)
class BaseHandler ( RequestHandler) :
@property
def db ( self) :
return self. application. db
1.1user_show.py
import datetime
from app import BaseHandler
from model. user import User
import json
class IndexHandler ( BaseHandler) :
def get ( self) :
data = [ ]
try :
query_set = self. db. query( User) . filter ( User. username== 'tuple' ) . all ( )
except Exception as e:
query_set= [ ]
print ( '查询出错' )
for user in query_set:
data. append( {
"username" : user. username,
'password' : user. password,
} )
self. write( {
'data' : data,
'code' : '001' ,
'msg' : '查询成功'
} )
2.mylib的db.py文件
from sqlalchemy import create_engine
from sqlalchemy. orm import sessionmaker, scoped_session
from sqlalchemy. ext. declarative import declarative_base
from mylib import SQLALCHEMY_DATABASE_URI
Base = declarative_base( )
def get_db_conn ( base) :
if base:
db_conn = create_engine( SQLALCHEMY_DATABASE_URI)
Session = sessionmaker( db_conn)
session = scoped_session( Session)
return session
3.models包的文件
from datetime import datetime
from sqlalchemy import Column, Integer, String, DateTime
from mylib. db import Base
class User ( Base) :
__tablename__ = 'test'
id = Column( Integer, primary_key= True , autoincrement= True )
username = Column( String( 20 ) , nullable= False )
password = Column( String( 50 ) )
creatime = Column( DateTime, default= datetime. now)
def __repr__ ( self) :
return """
<User(id:%s, username:%s, password:%s, creatime:%s)>
""" % (
self. id ,
self. username,
self. password,
self. creatime
)
if __name__ == "__main__" :
Base. metadata. create_all( )
3.测试的model文件,可以通过ipython直接导入测试
from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy. ext. declarative import declarative_base
from sqlalchemy import create_engine
from sqlalchemy. orm import sessionmaker, scoped_session, relationship
SQLALCHEMY_DATABASE_URI = 'postgresql://alen:123456@127.0.0.1:5432/dbtornado'
db_conn = create_engine( SQLALCHEMY_DATABASE_URI, echo= True , pool_size= 5 )
Base= declarative_base( db_conn)
SessionFactory = sessionmaker( db_conn)
session = scoped_session( SessionFactory)
class User1 ( Base) :
__tablename__ = 't_user'
id = Column( Integer, primary_key= True , autoincrement= True , name= 'id' )
name = Column( String( 64 ) , unique= True , name = 'name' , nullable= False , doc= '名字' )
age= Column( Integer, name= 'age' , doc= 'age' )
addresses = relationship( 'Address' , backref = 'user_info' , lazy= 'dynamic' )
class Address ( Base) :
__tablename__= 't_address'
id = Column( Integer, primary_key= True , autoincrement= True , name= 'id' )
detail = Column( String( 20 ) , name= 'detail' , doc= '详情' )
user_id = Column( Integer, ForeignKey( 't_user.id' ) , name= 'user_id' )
def create_session ( db_conn) :
SessionFactory = sessionmaker( db_conn)
session = scoped_session( SessionFactory)
return
if __name__ == '__main__' :
Base. metadata. drop_all( )
Base. metadata. create_all( )
user1 = User1( name= 'zs' )
session = create_session( db_conn)
session. add( user1)
session. flush( )
adr1 = Address( detail= '中关村3号' , user_id= user1. id )
adr2 = Address( detail= '华强北5号' , user_id= user1. id )
session. add_all( [ adr1, adr2] )
session. commit( )
from sqlalchemy import Column, Integer, String
from sqlalchemy. ext. declarative import declarative_base
from sqlalchemy import create_engine
from sqlalchemy. orm import sessionmaker, scoped_session
SQLALCHEMY_DATABASE_URI = 'postgresql://alen:123456@127.0.0.1:5432/dbtornado'
db_conn = create_engine( SQLALCHEMY_DATABASE_URI, echo= True , pool_size= 5 )
Base= declarative_base( db_conn)
class Users ( Base) :
__tablename__ = 'users'
id = Column( Integer, primary_key= True , autoincrement= True , name= 'id' )
name = Column( String( 64 ) , name = 'name' , nullable= False , doc= '名字' )
email = Column( String( 64 ) , name= 'email' , doc= '邮箱' )
age= Column( Integer, name= 'age' , doc= 'age' )
def __repr__ ( self) :
return "({},{},{},{})" . format ( self. id , self. name, self. email, self. age)
def create_session ( db_conn) :
SessionFactory = sessionmaker( db_conn)
session = scoped_session( SessionFactory)
return session
session = create_session( db_conn)
if __name__ == '__main__' :
Base. metadata. drop_all( )
Base. metadata. create_all( )
user1 = Users( name= 'wang' , email= 'wang@163.com' , age= 20 )
user2 = Users( name= 'zhang' , email= 'zhang@189.com' , age= 33 )
user3 = Users( name= 'chen' , email= 'chen@126.com' , age= 23 )
user4 = Users( name= 'zhou' , email= 'zhou@163.com' , age= 29 )
user5 = Users( name= 'tang' , email= 'tang@itheima.com' , age= 25 )
user6 = Users( name= 'wu' , email= 'wu@gmail.com' , age= 25 )
user7 = Users( name= 'qian' , email= 'qian@gmail.com' , age= 23 )
user8 = Users( name= 'liu' , email= 'liu@itheima.com' , age= 30 )
user9 = Users( name= 'li' , email= 'li@163.com' , age= 28 )
user10 = Users( name= 'sun' , email= 'sun@163.com' , age= 26 )
session = create_session( db_conn)
session. add_all( [ user1, user2, user3, user4, user5, user6, user7, user8, user9, user10] )
session. commit( )
4.manager.py文件
import os
import sys
from app import Application
from app. QuerySql import OthersHandler
from app. user_show import IndexHandler, AddHandler, AddHandler1, AddHandler2, AddHandler3
BASE_DIR = os. path. dirname( __file__)
sys. path. insert( 0 , os. path. join( BASE_DIR, 'mylib' ) )
print ( BASE_DIR)
print ( sys. path)
import tornado. ioloop
import tornado. httpserver
import tornado. options
from tornado. options import options, define
define( 'port' , default= 9000 , type = int , help = 'runserver port' )
if __name__ == '__main__' :
tornado. options. parse_command_line( )
app = Application( [
( r'/index' , IndexHandler) ,
( r'/users' , AddHandler) ,
( r'/user' , AddHandler1) ,
( r'/user/1' , AddHandler2) ,
( r'/user/2' , AddHandler3) ,
( r'/query' , OthersHandler) ,
] , debug= True )
http_server = tornado. httpserver. HTTPServer( app)
http_server. bind( options. port)
print ( '服务开启' )
http_server. start( )
tornado. ioloop. IOLoop. current( ) . start( )
5.结果
备注:路由中的其他文件代码
import datetime
from app import BaseHandler
from model. user import User
import json
class IndexHandler ( BaseHandler) :
def get ( self) :
data = [ ]
try :
query_set = self. db. query( User) . filter ( User. username== 'tuple' ) . all ( )
except Exception as e:
query_set= [ ]
print ( '查询出错' )
for user in query_set:
data. append( {
"username" : user. username,
'password' : user. password,
} )
self. write( {
'data' : data,
'code' : '001' ,
'msg' : '查询成功'
} )
class AddHandler ( BaseHandler) :
def post ( self) :
u1= User( username= 'alen3' , password= '123456' , creatime= datetime. datetime. now( ) )
u2= User( username= 'alen4' , password= '123456' , creatime= datetime. datetime. now( ) )
u3= User( username= 'alen5' , password= '123456' , creatime= datetime. datetime. now( ) )
self. db. add_all( [ u1, u2, u3] )
data = [ ]
for user in [ u1, u2, u3] :
data. append( {
'username' : user. username,
'password' : user. password,
} )
self. write( {
'data' : data,
'code' : '001' ,
'msg' : '增加成功'
} )
self. db. commit( )
class AddHandler1 ( BaseHandler) :
def post ( self) :
username = self. get_body_argument( 'username' )
password = self. get_body_argument( 'password' )
creatime = self. get_body_argument( 'creatime' , datetime. datetime. now( ) )
user = User( username= username, password= password, creatime= creatime)
self. db. add( user)
data = [ ]
data. append( {
'username' : user. username,
'password' : user. password,
} )
self. write( {
'data' : data,
'code' : '002' ,
'msg' : '增加成功'
} )
self. db. commit( )
class AddHandler2 ( BaseHandler) :
def prepare ( self) :
if self. request. headers. get( "Content-Type" ) . startswith( "application/json" ) :
self. json_dict = json. loads( self. request. body)
print ( self. json_dict)
print ( type ( self. json_dict) )
else :
self. json_dict = None
def post ( self) :
print ( 'post' , self. json_dict)
username = self. json_dict. get( 'username' )
password = self. json_dict. get( 'password' )
creatime = self. json_dict. get( 'creatime' , datetime. datetime. now( ) )
user = User( username= username, password= password, creatime= creatime)
self. db. add( user)
data = [ ]
data. append( {
'username' : user. username,
'password' : user. password,
} )
self. write( {
'data' : data,
'code' : '002' ,
'msg' : '增加成功'
} )
self. db. commit( )
class AddHandler3 ( BaseHandler) :
def post ( self) :
json_dict = json. loads( self. request. body. decode( ) )
print ( 'post' , json_dict)
username = json_dict. get( 'username' )
password = json_dict. get( 'password' )
creatime = json_dict. get( 'creatime' , datetime. datetime. now( ) )
user = User( username= username, password= password, creatime= creatime)
self. db. add( user)
data = [ ]
data. append( {
'username' : user. username,
'password' : user. password,
} )
self. write( {
'data' : data,
'code' : '002' ,
'msg' : '增加成功'
} )
self. db. commit( )