代码实现:
在写代码之前,应该将tornado的包放在统计目录下:
导入步骤在上一篇的内容
创建一个空的userapp的文件夹,用于我们的微服务的根目录
然后里面再创建两个新的文件夹和一个app.py的文件
再在models创建两个文件,init文件表示models可以被导入到其他的文件中
在user.py文件中编写UserModel:
class UserModel(object):
#初始化用户列表
users = {
1:{"name":"吴花花","age":25},
2:{"name":"搞基基","age":21},
3:{"name":"周菲菲","age":26},
4:{"name":"程吉吉","age":13},
}
# 获取单个用户,使用类方法
#cls是当前类。类方法不要用类的实例来调用,要用当前类来调用
@classmethod
def get(cls,user_id):
if user_id in cls.users:
return cls.users[user_id]
else:
return None
@classmethod
def update(cls,user_id,age):
cls.users[user_id]['age'] = age
@classmethod
def delte(cls,user_id):
#如果存在,则删除。如果不存在。则返回none
if user_id in cls.users:
return cls.users.pop(user_id)
else:
return None
@classmethod
def get_all(cls):
return cls.users
#创建新用户
@classmethod
def create(cls,name,age):
user_dict = {'name':name,'age':age}
#获取新用户的id+1
max_id = max(cls.users.keys()) + 1
#添加新用户
cls.users[max_id] = user_dict
在user.py编写代码:
import sys
sys.path.append("..")#把当前目录回到上一级
import tornado.web
from models.user import UserModel
from tornado.escape import json_encode
#处理所有用户的类
class UsersHandler(tornado.web.RequestHandler):
def post(self):
name = self.get_argument('name')
age = self.get_argument('age')
UserModel.create(name,age)
#成功创建,返回提示
resp = {'status':True,'msg':'成功'}
self.write(json_encode(resp))
#获取所有用户
def get(self):
users = UserModel.get_all()
self.write(json_encode(users))
#处理单个用户的类
class UserHandler(tornado.web.RequestHandler):
#专门处理get请求 自动触发get。只要是get请求
def get(self,user_id):
#获取单个用户
result = UserModel.get(int(user_id))
#返回数据给前端
if result:
self.write(result)
else:
resp = {'status': False, 'msg': '查询用户不存在'}
self.write(json_encode(resp))
def put(self,user_id):
#修改单个用户
#获取age参数,是一个字符串
age = self.get_argument('age')
#更新的指定的用户的年龄
UserModel.update(int(user_id),int(age))
resp = {'status':True,'mag':'update success'}
#将字典转换为字符串
self.write(json_encode(resp))
#删除单个用户
def delete(self,user_id):
result = UserModel.delte(int(user_id))
if result:
resp = {'status':True,'msg':result}
self.write(json_encode(resp))
else:
resp = {'status': False, 'msg': '你删除的用户不存在'}
self.write(json_encode(resp))
from handlers.user import UserHandler
from handlers.user import UsersHandler
import tornado.web
import tornado.httpserver
import tornado.ioloop
#定义全局的Handlers
HANDLERS = [
#可以吧第一个参数看做是正则表达式。匹配接口,
# 只要匹配成功,则会触发后面的类,会将括号中的参数传给指定的函数
#http://127.0.0.1:9999/api/user/1
(r'/api/user/(\d+)',UserHandler),#操作单个用户
(r'/api/user',UsersHandler)#操作所有用户
]
def run():
#创建app对象
app = tornado.web.Application(
HANDLERS,
debug = True #修改后服务自动重启
)
#启用tornado专用的非阻塞单线程app服务
http_server = tornado.httpserver.HTTPServer(app)
#定义监听的端口。
port = 9999
http_server.listen(port)
print('server id start no port:{}'.format(port))
#启动服务
tornado.ioloop.IOLoop.instance().start()
if __name__ == '__main__':
run()