Уведомления

Группа в Telegram: @pythonsu

#1 Май 1, 2015 11:19:31

sys_dev
От:
Зарегистрирован: 2011-06-22
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

Как послать GET-запрос с телом?

У меня проблема заключается в том, как научиться создавать 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)
Этот код находится в blueprint-e с именем ‘auth’

Посылаю в теством клиенте так:
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)

Офлайн

#2 Май 1, 2015 12:06:48

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Как послать GET-запрос с телом?

Сформируйте самостоятельно строку запроса и передайте.
По типу такого:

with app.test_client() as c:
    rv = c.get('/?vodka=42')
    assert request.args['vodka'] == '42'

P.S. Строка из документации

Офлайн

#3 Май 1, 2015 12:13:46

sys_dev
От:
Зарегистрирован: 2011-06-22
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

Как послать GET-запрос с телом?

@4kpt_III:
А в Чем цель Вашей проверки?

Вы предложили передать параметр в качестве части URL-а. Мне же надо в теле!



Офлайн

#4 Май 1, 2015 12:17:25

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Как послать GET-запрос с телом?

Оу. Так Вам необходимо узнать, что такое get запрос…

Офлайн

#5 Май 1, 2015 12:22:52

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Как послать GET-запрос с телом?

скорее отличие GET от POST запросов



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#6 Май 1, 2015 12:36:16

sander
Зарегистрирован: 2015-02-19
Сообщения: 317
Репутация: +  53  -
Профиль   Отправить e-mail  

Как послать GET-запрос с телом?

sys_dev
request.args

Офлайн

#7 Май 1, 2015 12:50:40

sys_dev
От:
Зарегистрирован: 2011-06-22
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

Как послать GET-запрос с телом?

4kpt_III
Оу. Так Вам необходимо узнать, что такое get запрос…
Я читал и читал и продолжаю перечитывать стандарт по HTTP. Но там нет слов “must not” или “not allowed”. Везде используются слова “It is not recomened”. Другими словами технически должно быть возможно!



Офлайн

#8 Май 1, 2015 12:53:03

sys_dev
От:
Зарегистрирован: 2011-06-22
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

Как послать GET-запрос с телом?

sander
request.args
request.args: ImmutableMultiDict([])
Да. Вижу что пришло пустое тело. Но не понимаю почему?



Офлайн

#9 Май 1, 2015 13:27:55

sander
Зарегистрирован: 2015-02-19
Сообщения: 317
Репутация: +  53  -
Профиль   Отправить e-mail  

Как послать GET-запрос с телом?

sys_dev
скорей всего из-за строки в декораторе

data = json.loads(request.data)
используй get_json

Офлайн

#10 Май 1, 2015 13:30:32

sys_dev
От:
Зарегистрирован: 2011-06-22
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

Как послать GET-запрос с телом?

sander
используй get_json
Ну вот, когда в request.data у меня будет больше данных, тогда да, могу попробовать. А пока у меня b'' и только!



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version