代码实现TornadoRESTful Api

代码实现:

在写代码之前,应该将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))

编写启动服务的app.py

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()
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值