Уведомления

Группа в Telegram: @pythonsu

#1 Май 1, 2015 13:37:07

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

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

sys_dev
тебе видней

Офлайн

#2 Май 1, 2015 13:40:41

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

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

sander
sys_devтебе видней
Ну Вы предлагаете то, что не решает проблему! Какая разница что использовать “лопату” или “мотыгу” если нет “земли”? ;)
		print_error(request.get_json(), 'request.get_json()')
дает:
request.get_json: None
Т.е. не важно что использовать. Либо get_json(), либо json.loads() результат будет только, если тело запроса появится и будет не пустым! А пока, как писал выше, оно пустое. И это и есть корень проблемы. Мне надо понять, почему? Почему тело приходит пустым? И только после этого уже имеет смысл думать над тем как правильно парсить json



Офлайн

#3 Май 1, 2015 14:31:10

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

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

Офлайн

#4 Май 1, 2015 14:37:30

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

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

sander
Testing Flask Applications
Мой код в моем первом посте с упоминанием “self.client = self.app.test_client()” уже говорит о том, что упоминаемый Вами документ как минимум одним глазом просмотрен.

У Вас есть что по существу? Вы видите ошибку в моем коде? Покажите как надо!

P.S.:
Возможно Вам показалось, что излишне жестко отвечаю. Прошу не обижаться. Просто я стронник конкретики, а не “вокруг да около”



Отредактировано sys_dev (Май 1, 2015 14:39:08)

Офлайн

#5 Май 1, 2015 14:39:25

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

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

sys_dev
да POST запрос надо блджад

Офлайн

#6 Май 1, 2015 14:45:33

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

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

Хорошо. Если до POST-запроса. ОК. Вот его применение:

Примение:

	def test_register_user(self):
		r = self.client.post(url_for('auth.register_user'), data=self.CREDENTIALS)
		print_error(r)
view-function:

@auth.route('/users/register', methods=['POST'])
@credentials_required
def register_user():
	pass

декоратор:

def print_request(request_):
	fmt = '\nmethod: %(method)s\ndata: %(data)s\nbase_url: %(base_url)s'
	data = { 'method' : request_.method,
		'data' : request_.data,
		'base_url' : request_.base_url}
	print(fmt % data, file=sys.stderr)
def credentials_required(f):
	@wraps(f)
	def wrapper(*args, **kwargs):
		print_request(request)
		data = request.get_json()
		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
Результат в STDERR:
method: POST
data: b''
base_url: http://localhost/auth/users/register

Не в POST-е проблема! В другом! Вот и хочется выяснить, где я на косячил? Инициализация test-клиента в моем первом посте



Офлайн

#7 Май 1, 2015 19:13:48

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

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

sys_dev
как я писал ранее, все дело в

request.data
а нужно
request.get_data()
и прочитай еще раз Testing Flask Applications

Отредактировано sander (Май 1, 2015 19:14:01)

Офлайн

#8 Май 1, 2015 19:31:46

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

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

sander
и прочитай еще раз Testing Flask Applications
Спасибо огромное!

Млин, а на мой вопрос уже был ответ: Get raw POST body in Python Flask regardless of Content-Type header. К сожалению он смог найтись в гугле только указывая get_data.



Отредактировано sys_dev (Май 1, 2015 19:51:47)

Офлайн

#9 Май 1, 2015 20:50:28

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

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

Итого:

Применяя request.data мою проблему можно решить путем “from flask import json” вместо “import json”. Пока не совсем понял почему, но работает!



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version