ресурс привязки фляги к конечной точке - PullRequest
0 голосов
/ 01 мая 2018

насколько я знаю, есть два способа привязки ресурсов к конечной точке с использованием фреймворка, первый использует декоратор @app.route, например:

from flask import Flask
app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'Hello, World!'

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

Второй способ заключается в создании класса, который наследуется от Resources в flask-restfull, этот класс содержит в качестве функций методы http, мы привязываем его к конечной точке, используя метод add_resource, как показано ниже:

from flask import Flask
from flask_restful import Resource, Api

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

class HelloWorld(Resource):
    def get(self):
        return 'Hello, World!'

api.add_resource(HelloWorld, '/')

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

как я понимаю, эти два разных синтаксиса делают одно и то же, но я не понимаю, в чем разница между ними? или один предназначен для приложений определенного типа, а другой - для приложений другого типа?

1 Ответ

0 голосов
/ 14 января 2019

Flask-RESTful - это расширение Flask, которое само по себе построено на многих из замечательных утилит, предоставляемых Werkzeug.

from flask import Flask
app = Flask(__name__)

@app.route('/foo')
def say_foo():
    return 'foo'

@app.route('/bar')
def say_bar():
    return 'bar'

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

Одна из главных идей REST - использование HTTP для взаимодействия с ресурсами. Проблема этого кода в том, что наш ресурс разделен на несколько методов. Там нет инкапсуляции. Хотя сам API включает в себя основные элементы REST, код полностью не в состоянии охватить эти идеи. Это плохо! Нет причин, по которым наш внутренний код не должен соответствовать внешнему виду нашего API.

Использование Flask-RESTful

from flask import Flask
from flask_restful import Resource, Api

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

class Foo(Resource):
    def get(self):
        return 'foo'

class Bar(Resource)
def get(self):
    return 'bar'

# As you might have guessed, these two lines add a given resource to our API at the 
# specified route. We no longer need to enumerate what methods a route supports, 
# since Flask-RESTful resolves this information by inspecting what methods you've 
# defined on your resource object.

api.add_resource(Foo, '/foo')
api.add_resource(Bar, '/bar')

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

У нас сейчас классы! Это огромная сделка. Наши маршруты теперь отображаются непосредственно на объекты. Более того, методы данного класса точно такие же, как их HTTP-аналоги. Нам больше не нужно иметь дело с методами именования на наших маршрутах, таких как say_foo, так как между нашими методами HTTP и методами в наших классах есть соотношение 1: 1.

читать больше: https://dougblack.io/words/flask-restful-101.html

...