Flask面向接口开发之flask-restful

落花浮王杯 提交于 2021-01-05 08:03:19
简介:
         Flask-RESTful 是一个 Flask 扩展插件,它添加了快速构建 REST APIs 的支持。是能够跟你现有的ORM/库协同工作的轻量级的扩展。
    
Restful API规范:
    restful api是用于在前端与后台进行通信的一套规范,是个风格,不是标准;使用这个规范可以让前后端开发变的更加轻松。
 

协议

采用http 或者 https协议

数据传输格式

数据之间传输的格式为json,而不使用xml

url

不能有动词 只能有名词 对于一些名字 如果出现复数 那么在后面添加 s

比如 想要获取文章列表 那么应该 使用 /articles/ 而不能使用 /get_article /

HTTP请求方法

  1. GET : 从服务器上获取资源。

  2. POST: 在服务器上新创建一个资源。

  3. PUT: 在服务器上更新资源。(客户端提供所有改变后的数据)

  4. PATCH : 在服务器上更新资源。(客户端只提供需要改变的属性)

  5. DELETE :在服务器上删除资源。

示例

  • GET /users/ : 获取所有的用户

  • POST /user/ :新建一个用户

  • GET /user/id/ :根据id获取一个用户

  • PUT /user/id/:更新某个的id用户的信息 (需要提供用户的所有信息)

  • PATCH /user/id/:更新某个id用户的信息 (只提供需要改变的信息)

  • DELETE /user/id/ : 删除某个id用户的信息

状态码

状态码 原生描述 描述
200 OK 服务器成功响应客户端的请求。
400 INVALID REQUEST 用户发出的请求有错误,服务器没有进行新建或修改数据的操作
401 Unauthorized 用户没有权限访问这个请求
403 Forbidden 因为某些原因禁止访问这个请求
404 NOT FOUND 用户发送的请求的url不存在
406 NOT Acceptable 用户请求不被服务器接收(比如服务器期望客户端发送某个字段,但是没有发送)。
500 Internal server error 服务器内部错误,比如出现了bug

 

一个最小的 Flask-RESTful API 像这样:

 

 1 from flask import Flask
 2 from flask.ext import restful
 3 
 4 app = Flask(__name__)
 5 api = restful.Api(app)
 6 
 7 class HelloWorld(restful.Resource):
 8     def get(self):
 9         return {'hello': 'world'}
10 
11 api.add_resource(HelloWorld, '/')
12 
13 if __name__ == '__main__':
14     app.run(debug=True)

 

参数解析:

1 from flask_restful import reqparse
2 
3 class UserResource(Resource):
4     parser = reqparse.RequestParser()
5     parser.add_argument("tokrn", help="请输入token")
6     parser.add_argument("username", required=True)
7 
8     args = parser.parse_args()
9     username = args.username

 

add_argument可以指定这个字段的名字,这个字段的数据类型等
  1. fault:默认值,如果这个参数没有值,那么将使用这个参数指定的值。
  2. required:是否必须。默认为False,如果设置为True,那么这个参数就必须提交上来。
  3. type:这个参数的数据类型,如果指定,那么将使用指定的数据类型来强制转换提交上来的值。
  4. choices:选项。提交上来的值只有满足这个选项中的值才符合验证通过,否则验证不通过。
  5. help:错误信息。如果验证失败后,将会使用这个参数指定的值作为错误信息。
  6. trim:是否要去掉前后的空格。
  7. location:指定参数的位置。

 如果你要接受一个键有多个值的话,你可以传入 action='append':

1 parser.add_argument('name', type=str, action='append')

 

 以不同的名称存储你的参数一旦它被解析的时候,你可以使用 dest kwarg。

1 parser.add_argument('name', type=str, dest='public_name')
2 args = parser.parse_args()
3 args['public_name']

 通过传入一个列表到 location 中可以指定 多个 参数位置:

1 parser.add_argument('text', location=['headers', 'values'])
2 
3 # 列表中最后一个优先出现在结果集

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!