目录
前言
手册目录:
软件下载及环境安装:
实习手册一(基于Tornado框架的接口响应服务)软件下载与环境配置
Tornado基本框架搭建:
实习手册二(基于Tornado框架的接口响应服务)Tornado基本框架的搭建
Tornado框架中日志的记录,路由的分发,接口的响应:
实习手册三(基于Tornado框架的接口响应服务)Tornado框架中日志的记录,路由的分发,接口的响应
通过PyMySQL,SQLAlchemy在PyCharm中实现对数据的增删改查:
实习手册四(基于Tornado框架的接口响应服务)通过PyMySQL,SQLAlchemy在PyCharm中实现对数据的增删改查
SqlAlchemy的再封装,PyMySQL和SqlAlchemy的结合使用:
实习手册五(基于Tornado框架的接口响应服务)SqlAlchemy的再封装,PyMySQL和SqlAlchemy的结合使用
本章我们会将前几章的功能结合起来,在Tornado框架中嵌入我们的数据库处理模块。
在Tornado框架中嵌入我们的数据库处理模块。
1、在Tornado框架中嵌入我们的数据库处理模块
在前两章中,我们已经实现了通过pymysql+sqlalchemy实现了使用python代码来处理数据库,而且已经对sqlalchemy进行了封装,现在我们直接将上一章中的SqlAlBase,MysqlBase以及User类写入我们的Tornado框架中:
import datetime
import json
from tornado.web import RequestHandler
from tornado.web import Application
from tornado.ioloop import IOLoop
import pymysql
from sqlalchemy import create_engine, text
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy import MetaData
from sqlalchemy import Column, String, Integer
# URL用来作为SqlAlchemy创造引擎的url
# 格式为:"mysql+pymysql://root:你的mysql密码@localhost:3306/数据库名字"
URL = "mysql+pymysql://root:你的密码@localhost:3306/数据库名称"
class SqlAchBase():
engine = create_engine(URL)
base = declarative_base()
session = sessionmaker(bind=engine)()
metadata = MetaData()
@classmethod
def get_session(cls):
return cls.session
class MysqlBase():
session = SqlAchBase.get_session()
conn = None
# 测试连接方法
@classmethod
def TestConn(cls):
if not cls.conn:
cls.conn = pymysql.connect(user='root', host='localhost', password=你的密码, db=数据库名称, port=3306)
print("trying to connect to '%s'" % cls.conn)
else:
print("already connected to '%s'" % cls.conn)
# 增
@classmethod
def add(cls, user):
cls.TestConn()
cls.session.add(user)
cls.session.commit()
# 删
@classmethod
def delete(cls, filter):
cls.TestConn()
cls.session.query(cls).filter(text(filter)).delete(synchronize_session=False)
cls.session.commit()
# 改
@classmethod
def update(cls, filter, value):
cls.TestConn()
cls.session.query(cls).filter(text(filter)).update(value, synchronize_session=False)
cls.session.commit()
# 查
@classmethod
def query(cls, filter=None):
cls.TestConn()
if filter:
item_list = cls.session.query(cls).filter(text(filter)).all()
for item in item_list:
print(item)
else:
item_list = cls.session.query(cls)
for item in item_list:
print(item)
class User(SqlAchBase().base, MysqlBase):
__tablename__ = 'user'
userid = Column(Integer, autoincrement=True, primary_key=True)
uname = Column(String(30))
pwd = Column(String(30))
create_time = Column(String(30))
# 注册功能处理器
class RegisterHandler(RequestHandler):
# 用来存储接口的请求参数
data = None
def post(self, *args, **kwargs):
path = self.request.path.split('/')
# 注意,这里是通过body传递了json格式的数据,tornado获取后会将其自动转化为字典
self.data = json.loads(self.request.body)
method = path[-1]
if callable(getattr(self, method)):
getattr(self, method)()
else:
self.write("404 not found")
def register_user(self):
user = User(uname=self.data['uname'], pwd=self.data['pwd'], create_time=str(datetime.datetime.now()))
User.add(user)
app = Application([
# 注册功能路由
(r'/user/register/.*', RegisterHandler)
])
if __name__ == '__main__':
app.listen(8888)
IOLoop.current().start()
可以看到,我们这里写了一个RegisterHandler(注册处理器),用来响应注册功能,其中有一个register_user()方法,用来作为接口,来实现用户注册的功能。
2、使用Postman来测试接口
首先,我们要实现的是一个注册用户的功能,在前面我们已经提到过,Tornado框架中是通过路由来确定大的功能分区,再通过get或post方法来进行小功能的分发,其中,Tornado中实现小功能的部分是通过python代码中的def方法来实现的,其实可以理解成,一个方法对应的就是一个功能,同时一个接口对应的就是一个方法,Tornado中是通过接口来调用对应的功能的。
因此,我们如果想对功能进行测试的话,首先要学会测试接口,而Postman便是一个非常简易方便的用来测试接口的软件,之前没有了解过Postman的小伙伴们可以点击下方这个链接进行学习。
接口测试之Postman使用全指南(原来使用 Postman测试API接口如此简单)
首先,先进入我们的Workspaces界面,点击左侧栏加号来新建一个连接目录
然后点击右侧的加号,来新建连接
然后将请求方式切换为Post,输入url,在body部分选中row,然后将Text切换为json
然后输入新注册的用户名,密码即可,时间会直接获取当前时间,详细见上方的代码
然后点击send,即可发送请求,请求成功后结果栏会返回1,然后进入到navicat中进行查看
可以看到,已经成功添加了一条新数据,create_time格式可以通过后段的代码进行调整,这里不多做介绍。
结语
本章我们将Tornado框架和Mysql服务结合起来,通过请求接口传递对应参数便可以对数据库进行对应的处理,其他功能诸如删、改、查,都可以依照这个样式来实现,本章只是为了实现此功能而将代码全部放在一个python文件中,略显冗长请大家多多包容。