Форум сайта python.su
У меня проблема заключается в том, как научиться создавать GET-запросы с телом? В теле нужно указывать JSON-объект с двумя полями username и password.
Отсюда вопросы:
1. Можно ли вообще посылать GET-запросы с телом или только без тела?
2. Если п.1. “да, можно”, то имеется ли в тестовом клиенте Flask.test_client() возможность послать такой запрос?
При моих экспериментах в мою view-function приходят пустые данные:
Принимаю так:
from flask import request def credentials_required(f): @wraps(f) def wrapper(*args, **kwargs): data = json.loads(request.data) user = User.query.filter_by(username=data['username']).first() if not (user and user.verify_password(data['password'])): abort(401) return f(*args, **kwargs) return wrapper @auth.route('/users/token') @credentials_required def getnerate_token(): print(request.data)
def setUp(self): self.app = create_app(config_name='testing') self.app_ctx = self.app.app_context() self.app_ctx.push() self.client = self.app.test_client() def test_token(self): self.client.get(url_for('auth.generate_token'), data={'username' : 'user1', 'password' : 'pass'})
Отредактировано sys_dev (Май 1, 2015 12:02:02)
Офлайн
Сформируйте самостоятельно строку запроса и передайте.
По типу такого:
with app.test_client() as c: rv = c.get('/?vodka=42') assert request.args['vodka'] == '42'
Офлайн
@4kpt_III:
А в Чем цель Вашей проверки?
Вы предложили передать параметр в качестве части URL-а. Мне же надо в теле!
Офлайн
Оу. Так Вам необходимо узнать, что такое get запрос…
Офлайн
скорее отличие GET от POST запросов
Офлайн
sys_dev
request.args
Офлайн
4kpt_IIIЯ читал и читал и продолжаю перечитывать стандарт по HTTP. Но там нет слов “must not” или “not allowed”. Везде используются слова “It is not recomened”. Другими словами технически должно быть возможно!
Оу. Так Вам необходимо узнать, что такое get запрос…
Офлайн
sander
request.args
request.args: ImmutableMultiDict([])
Офлайн
Офлайн
sanderНу вот, когда в request.data у меня будет больше данных, тогда да, могу попробовать. А пока у меня b'' и только!
используй get_json
Офлайн