Как мне использовать flask.url_for () с flask-restful?

python flask flask-restful

8843 просмотра

3 ответа

27934 Репутация автора

Я настроил Flask restful следующим образом:

api = Api(app, decorators=[csrf_protect.exempt])
api.add_resource(FTRecordsAPI,
                 '/api/v1.0/ftrecords/<string:ios_sync_timestamp>',
                 endpoint="api.ftrecord")

Я хотел бы перенаправить внутренне к конечной точке api.ftrecord.

Но в тот момент, когда я пытаюсь сделать это:

base_url = flask.url_for('api.ftrecord')

Я получаю исключение.

  File "/Users/hooman/workspace/F11A/src/lib/werkzeug/routing.py", line 1620, in build
    raise BuildError(endpoint, values, method)
BuildError: ('api.ftrecord', {}, None)

Что мне не хватает, пожалуйста?

Автор: Houman Источник Размещён: 14.06.2014 07:41

Ответы (3)


12 плюса

772571 Репутация автора

Вам нужно будет указать значение для ios_sync_timestampчасти вашего URL:

flask.url_for('api.ftrecord', ios_sync_timestamp='some value')

или вы можете использовать Api.url_for(), который берет ресурс:

api.url_for(FTRecordsAPI, ios_sync_timestamp='some value')
Автор: Martijn Pieters Размещён: 15.06.2014 12:15

3 плюса

36 Репутация автора

У меня была эта проблема сегодня. Вот запрос на добавление, который добавил функциональность (11 месяцев назад):

https://github.com/twilio/flask-restful/pull/110

Вы можете увидеть его пример использования там.

В моем файле ресурсов у меня нет доступа к контексту приложения. Итак, я должен был сделать это:

from flask.ext import restful
from flask import current_app

api = restful.Api
print api.url_for(api(current_app), UserResource, user_id=user.id, _external=True)

Надеюсь, это поможет.

Автор: Miles Richardson Размещён: 01.07.2014 10:41

3 плюса

31 Репутация автора

api = Api(app, decorators=[csrf_protect.exempt])
api.add_resource(FTRecordsAPI,
                 '/api/v1.0/ftrecords/<string:ios_sync_timestamp>',
                 endpoint="api.ftrecord")
with app.test_request_context():
    base_url = flask.url_for('api.ftrecord')

Я встретил ту же ошибку. Используя 'with app.test_request_context ():', это работает.

Автор: user3131182 Размещён: 01.07.2016 07:07
Вопросы из категории :
32x32