基于Flask的 api(三)

摘要:
使用flask的RESTful扩展库flask-restful安装pipinstallflask-restfuleg:最简单的apifromflaskimportFlaskfromflask_restfulimportApi,Resourceapp=Flask(__name__)api=Api(app)classHelloWorld(Resource):defget(self):return{'h

使用flask的RESTful扩展库 flask-restful

安装

pip install flask-restful

eg:

最简单的api

fromflask import Flask
fromflask_restful import Api, Resource

app =Flask(__name__)
api =Api(app)

classHelloWorld(Resource):
    def get(self):
        return {'hello': 'world'}
api.add_resource(HelloWorld, '/')

if __name__ == "__main__":
    app.run(debug=True,port=5000)

测试

$ curl -i http://localhost:5000
  % Total    % Received %Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    25  100    25    0     0     25      0  0:00:01 --:--:--  0:00:01   123HTTP/1.0 200OK
Content-Type: application/json
Content-Length: 25Server: Werkzeug/1.0.1 Python/3.7.7Date: Tue, 24 Nov 2020 04:31:12GMT

{
    "hello": "world"}

restful api

fromflask import Flask
fromflask_restful import reqparse, abort, Api, Resource

app =Flask(__name__)
api =Api(app)

tasks =[
    {
        'id': 1,
        'title': u'Buy groceries',
        'description': u'Milk, Cheese, Pizza, Fruit, Tylenol',
        'done': False
    },
    {
        'id': 2,
        'title': u'Learn Python',
        'description': u'Need to find a good Python tutorial on the web',
        'done': False
    }
]

def abort_if_todo_doesnt_exist(task,id):
    if len(task) ==0:
        abort(404, message="task {} doesn't exist".format(id))

parser =reqparse.RequestParser()
parser.add_argument('title')
parser.add_argument('description')
parser.add_argument('done')

# (put/get/delete)Task
classTask(Resource):
    def get(self, id):
        task = list(filter(lambda t: t['id']==id,tasks))
        abort_if_todo_doesnt_exist(task,id)
        returntask

    def delete(self, id):
        task = list(filter(lambda t: t['id']==id,tasks))
        abort_if_todo_doesnt_exist(task,id)
        tasks.remove(task[0])
        return {'result': True,'list':tasks}

    def put(self, id):
        task = list(filter(lambda t: t['id']==id,tasks))
        abort_if_todo_doesnt_exist(task,id)
        args =parser.parse_args()
        task[0]['title'] = args['title']
        task[0]['description'] = args['description']
        task[0]['done'] = args['done']
        return task, 201
#(post/get)TaskList
classTaskList(Resource):
    def get(self):
        returntasks

    def post(self):
        args =parser.parse_args()
        task ={
            'id': tasks[-1]['id'] + 1,
            'title': args['title'],
            'description': args['description'],
            'done': False
        }
        tasks.append(task)
        return task, 201
# 设置路由
api.add_resource(TaskList, '/tasks')
api.add_resource(Task, '/tasks/<int:id>')

if __name__ == "__main__":
    app.run(debug=True,port=5000)

说明:

RequestParser参数解析类,可以很方便的解析请求中的-d参数,并进行类型转换

使用add_resource设置路由

免责声明:文章转载自《基于Flask的 api(三)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇使用swagger遇到的问题关于树上差分下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Office Tab Enterprise 9.2——附可用激活码

转自:网景论坛 Office Tab是office的扩展插件,Office Tab 的主要功能就是可以让office 2013、office 2010、2007、2003实现多窗口标签式浏览。不仅如此,Office Tab 还支持自定义标签外观、标签的显示位置、标签的关闭方式、随意拖拽标签位置等。你甚至可以像使用浏览器一样来使用Office。由于免费版的o...

Office2007设置无格式粘贴

打开Word 2007,按Alt+F11。这时会出现一个Visual Basic编辑窗口。如图所示: 上图中左上方,鼠标右击Normal→插入→模块,出现下图: 双击“模块1”→在右侧出现的窗口中填写以下代码: Sub 无格式粘贴() Selection.PasteSpecial Link:=False, DataType:=wdPasteText,...

Spark 系列之环境搭建(一)

1. Java 安装 下载安装 jdk1.8: 1、解压: [root@bogon app]# pwd /home/hj/app [root@bogon app]# tar -zxvf jdk-8u261-linux-x64.tar.gz 2、配置 .bash_profile: export JAVA_HOME=/home/hj/app/jdk1.8.0...

WPF 客户端浏览器 添加Loading加载进度

在windows开发界面时,使用浏览器来请求和显示网页内容,是比较常见的。 但是在请求网页内容时,因网速或者前端功能复杂加载较慢,亦或者加载时遇到各种问题,如空白/黑屏/加载不完整/证书问题等。 因此需要一个加载进度/加载失败的显示界面。 加载进度显示 界面显示 1. 界面显示,加载进度样式可参考: 绕圈进度条 2. 添加Loading状态枚举。不加载/加...

安装与破解PyCharm专业版

安装与破解PyCharm专业版(有两种方法) 一、安装与破解PyCharm专业版 1.安装pycharm(建议安装python3) 这是网址:(https://www.jetbrains.com/pycharm/download/#section=windows) 2.PyCharm的破解: (1)点击链接下载左边的专业版 (2) 这是下载好的文件,双击...

华为EC321CDMA PCMICA 无线网卡Ubuntu下使用

工作性质的原因,公司配备了华为EC321 CDMA无线网卡,PCMCIA接口。Windows环境下安装好驱动然后通过华为自带的软件可以拨号上网。 Linux下面能不能使用这块网卡呢,答案是肯定的。linux内核中已经包含了很多标准CDMA无线网卡芯片的驱动,只要你使用的CDMA卡是兼容的标准芯片那么在linux环境中使用的可能性很大。其中华为EC321这款...