1.安装
pip install flask
pip install flask-restful
2.书写规范
-
数据传输格式
都是json格式
-
请求方式
-
GET 获取全部的资源
-
GET 获取某个特定资源
-
POST 创建新资源
-
PUT 更新特定资源
-
DELETE 删除特定资源
-
-
状态码
-
GET检索资源列表,返回一个资源数组或字典,并返回状态码200,表示请求成功。
-
GET检索某个特定资源,返回单个资源,并返回状态码200,表示请求成功。
-
POST创建新资源,返回创建后的资源,并返回状态码201,表示资源创建成功。
-
PUT更新资源,返回更新后的资源,并返回状态码201,表示资源更新成功。
-
DELETE删除资源,返回空,并返回状态码204,表示资源删除成功,服务器已无该资源
-
3.Flask-Restful插件
Flask-Restful
是一个专门用来写restful api
的一个插件。使用他可以快速的集成restful api
功能。在app
的后台以及纯api
的后台中,这个插件可以帮助我们节省很多时间。当然,如果在普通的网站中,这个插件就显得有些鸡肋了,因为在普通的网页开发中,是需要去渲染HTML代码的,而Flask-Restful
在每个请求中都是返回json
格式的数据。
-
基本使用:
1.从flask_restful中导入Api,来创建一个api对象。 2.写一个视图函数,让他继承自Resource,然后在这个里面,使用你想要的请求方式来定义相应的方法,比如你 想要将这个视图只能采用post请求,那么就定义一个post方法。 3.使用api.add_resource添加视图与url。
class LoginView(Resource):
def post(self,username=None):
return {"username":"zhang"}
api.add_resource(LoginView,'/login/<username>/','/regist/')#映射到url
如果使用Flask-Restful
,那么定义视图函数的时候,就要继承自flask_restful.Resource
类,然后再根据当前请求的method
来定义相应的方法。比如期望客户端是使用get
方法发送过来的请求,那么就定义一个get
方法。类似于MethodView
。
from flask import Flask,render_template,url_for
from flask_restful import Api,Resource
app = Flask(__name__)
# 用Api来绑定app
api = Api(app)
class IndexView(Resource):
def get(self):
return {"username":"zhiliao"}
api.add_resource(IndexView,'/',endpoint='index')
注意事项:
-
endpoint
是用来给url_for
反转url
的时候指定的。如果不写endpoint
,那么将会使用视图的名字的小写来作为endpoint
。 -
add_resource
的第二个参数是访问这个视图函数的url
,这个url
可以跟之前的route
一样,可以传递参数。并且还有一点不同的是,这个方法可以传递多个url
来指定这个视图函数。 -
如果你想返回json数据,那么就使用
flask_restful
,如果你是想渲染模版,那么还是采用之前的方式,就是app.route
的方式。
4.参数解析
Flask-Restful
插件提供了类似WTForms
来验证提交的数据是否合法的包,叫做reqparse
。以下是基本用法:
parser = reqparse.RequestParser()
parser.add_argument('username',type=str,help='请输入用户名')
args = parser.parse_args()
add_argument
可以指定这个字段的名字,这个字段的数据类型等。以下将对这个方法的一些参数做详细讲解:
-
default
:默认值,如果这个参数没有值,那么将使用这个参数指定的值。 -
required
:是否必须。默认为False
,如果设置为True
,那么这个参数就必须提交上来。 -
type
:这个参数的数据类型,如果指定,那么将使用指定的数据类型来强制转换提交上来的值。 -
choices
:选项。提交上来的值只有满足这个选项中的值才符合验证通过,否则验证不通过。 -
help
:错误信息。如果验证失败后,将会使用这个参数指定的值作为错误信息。 -
trim
:是否要去掉前后的空格。
其中的type
,可以使用python
自带的一些数据类型,也可以使用flask_restful.inputs
下的一些特定的数据类型来强制转换。比如一些常用的:
-
url
:会判断这个参数的值是否是一个url
,如果不是,那么就会抛出异常。 -
regex
:正则表达式。 -
date
:将这个字符串转换为datetime.date
数据类型。如果转换不成功,则会抛出一个异常。
-
Flask-restful
注意事项:
在蓝图中,如果使用flask-restful
,那么在创建Api
对象的时候,就不要再使用app
了,而是使用蓝图。 如果在flask-restful
的视图中想要返回html
代码,或者是模版,那么就应该使用api.representation
这个装饰器来定义一个函数,在这个函数中,应该对html
代码进行一个封装,再返回。示例代码如下:
@api.representation('text/html')
def output_html(data,code,headers):
print(data)
# 在representation装饰的函数中,必须返回一个Response对象
resp = make_response(data)
return resp
class ListView(Resource):
def get(self):
return render_template('index.html')
api.add_resource(ListView,'/list/',endpoint='list')