Tornado 初现

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
#通过 SQLAlchemy  提供的语法来声明User表,为了测试我修改为test表
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__":
    #执行此代码,就会把创建好的 Module 映射到数据库中
    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')
    #开启动态查询
    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')
    #定义反向关系属性 可以通过backref参数代替反向关系属性
    # user_info = relationship('User1')

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)  # type: Session
    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['username']
        # password = self.json_dict['password']
        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 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):
        # username = self.json_dict['username']
        # password = self.json_dict['password']
        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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值