Bootstrap

Flask-RESTful的介绍和简单使用

1、Restful的介绍

        Flask-RESTful是用于快速构建REST API的Flask扩展。

1.1 Restful接口规范

        REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。

        RESTful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。

        它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次。

        RESTful接口规范是用于在前端与后台进行通信的一套规范。使用这个规范可以让前后端开发变得更加轻松。

1.2 Restful使用协议

        用http或者https协议。

1.3 数据传输格式

        数据传输的格式应该都用json格式。

1.4 适用场景

一个系统的数据库数据,展现的平台有PC端、移动端、app端、ios端。

  • 前端工程师:都遵循RESTful编程规范
  • 后端工程师:都遵循RESTful编程规范
  • 最终结果:开发效率高,便于管理

1.5 url链接规则

url链接中,不能有动词,只能有名词。

并且对于一些名词,如果出现复数,那么应该在后面加s。

比如:获取新闻列表,应该使用 /news/ ,而不应该使用/get_news/

1.6 HTTP请求方式

  • GET:从服务器上获取资源。
  • POST:在服务器上新增或者修改一个资源。
  • PUT:在服务器上更新资源。(客户端提供所有改变后的数据)
  • PATCH:在服务器上更新资源。(客户端只提供需要改变的属性)
  • DELETE:从服务器上删除资源。

1.7 状态码

2、Restful基本使用

2.1 优缺点

优势

  • Flask-Restful是一个专门用来写restful api的一个插件。
  • 使用它可以快速的集成restful api接口功能。
  • 在系统的纯api的后台中,这个插件可以帮助我们节省很多时间。

缺点

  • 如果在普通的网站中,这个插件就没有优势了,因为在普通的网站开发中,是需要去渲染HTML代码的,而Flask-Restful在每个请求中都是返回json格式的数据。

2.2 安装

pip install flask-restful

2.3 基本使用

定义Restful的类视图

1. 从 flask_restful 中导入 Api ,来创建一个 api 对象。

2. 写一个类视图,让他继承自 Resource 类,然后在这个里面,使用你想要的请求方式来定义相应的方法,比如你想要将这个类视图只能采用 post 请求,那么就定义一个 post 方法。

3. 使用 api.add_resource 来添加类视图与 url 。

注意

  • 如果你想返回json数据,那么就使用flask_restful,如果你是想渲染模版,那么还是采用之前的方式,就是 app.route 的方式。
  • url还是跟之前的一样,可以传递参数。也跟之前的不一样,可以指定多个url。
  • endpoint是用来给url_for反转url的时候指定的。如果不写endpoint,那么将会使用视图的名字的小写来作为endpoint。
  • add_resource的第二个参数是访问这个视图函数的url,这个url可以跟之前的route一样,可以传递参数,并且还有一点不同的是,这个方法可以传递多个url来指定这个视图函数。

示例代码1:

from flask import Flask
from flask_restful import Resource, Api

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


class HelloWorldResource(Resource):
    def get(self):
        return {'hello': 'world'}

    def post(self):
        return {'msg': 'post hello world'}


api.add_resource(HelloWorldResource, '/')

if __name__ == '__main__':
    app.run(debug=True)

运行结果:

示例代码2:

from flask import Flask, url_for
from flask_restful import Resource, Api


app = Flask(__name__)
# 建立Api对象,并绑定应用APP
api = Api(app)


class LoginView(Resource):
    def get(self):
        return {"flag": True}

    def post(self):
        return {"flag": False}


# # 建立路由映射
# api.add_resource(LoginView, '/login/')
#
# with app.test_request_context():
#     # werkzeug.routing.BuildError: Could not build url for endpoint 'login'. Did you mean 'loginview' instead?
#     # 默认没有写endpoint反向url_for函数通过小写函数名
#     # 如果有多个url,会返回第1个URL
#     # print(url_for('loginview'))
#     print(url_for('login'))


# 建立路由映射
api.add_resource(LoginView, '/login/', '/login2/', endpoint='login')

with app.test_request_context():
    # 默认没有写endpoint反向url_for函数, 通过小写函数名实现
    # 如果有多个url,会返回第1个URL
    # print(url_for('loginview'))
    print(url_for('login'))


if __name__ == '__main__':
    app.run(debug=True)

运行结果:

示例代码3:

from flask import Flask, url_for
from flask_restful import Resource, Api


app = Flask(__name__)
# 建立Api对象,并绑定应用APP
api = Api(app)


class LoginView(Resource):
    def get(self):
        return {"flag": True}

    def post(self):
        return {"flag": False}


class Loginview(Resource):
    def get(self):
        return {"flag2": True}

    def post(self):
        return {"flag2": False}


# 建立路由映射
# api.add_resource(LoginView, '/login/', '/login2/', endpoint='login')
api.add_resource(LoginView, '/login/', '/login2/')
# api.add_resource(Loginview, '/login_lower/', '/login2_lower/', endpoint='login2')
api.add_resource(Loginview, '/login_lower/', '/login2_lower/')


if __name__ == '__main__':
    app.run(debug=True)

运行结果:

注意:使用视图函数时,类名.lower()的值不能相同。

;