Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 28, 2013 22:50:01

quix
Зарегистрирован: 2012-06-23
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка параметра в request.GET

Здравствуйте, я ЧАЙНИК! Делаю уроки по учебнику Головатый и компания.
Вот такая вот фигня вначале функция проверяет параметр ‘q’ в request.GET
я не даю ему этот параметр, и функция НЕ РУГАЕТСЯ вот код

def search(request):# q находится в запросе формы метод GET
	error = False
	if 'q' in request.GET:	#Убеждаемся, что параметр 'q' существует в request.GET
		q = request.GET["q"]#Присваиваем то, что нам передали в запросе
		if not q:
			error = True
		if len(q)>20:
			error = True
		else:
			books = Book.objects.filter(title__icontains=q)    #filtr db
			return render_to_response('search_results.html', {'books': books, 'query': q})	
	return render_to_response('search_form.html', {'error': False})

Вот форма с неверным параметром

<html>
	<head>
		<title>
				Поиск
		</title>	
	</head>
	
	<body>
{% if error %}
	<p style="color: red">Введите поисковый запрос!</p>
{% endif %}
		<form action="" method="get">
			<input type="text" name="iiii">
			<input type="submit" value = "Найти">
		</form>
	</body>
	
</html>

Спасите помогите! застрял, пока не заработает дальше не пойду …

Отредактировано quix (Апрель 28, 2013 22:51:14)

Офлайн

#2 Апрель 29, 2013 06:58:52

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

Проверка параметра в request.GET

а в чем проблема?
На ваш взгляд, почему должна ругаться?
я не вижу тута ошиболк

Офлайн

#3 Апрель 29, 2013 07:03:31

quix
Зарегистрирован: 2012-06-23
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка параметра в request.GET

Функция ждет ‘q’ а я ей пихаю

<input type="text" name="iiii">

Офлайн

#4 Апрель 29, 2013 07:43:13

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

Проверка параметра в request.GET

quix
ну вот вам простой прием проверки: сделайте

def search(request):# q находится в запросе формы метод GET
    raise Exception()
посомтрите на страницу ошибки, там есть пункт раскрывающий содержание GET и POST словарей, смотрите что у вас в GET.


К тому же вы не самым лучшим образом проверяете (ИМХО + документация), рекомендуется так:
value=request.GET.get('q')
Если в переменной value значение None, то параметра q там нет,в противном случае присвоется искомое значение



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

Офлайн

#5 Апрель 29, 2013 09:23:47

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

Проверка параметра в request.GET

quix
Функция ждет ‘q’ а я ей пихаю
функция не ждет q. а лишь проверяет его наличие. если его нет, то по коду, ничего не будет.

Офлайн

#6 Апрель 29, 2013 17:11:35

buddha
От:
Зарегистрирован: 2012-03-02
Сообщения: 422
Репутация: +  15  -
Профиль   Отправить e-mail  

Проверка параметра в request.GET

ilnur
а в чем проблема?На ваш взгляд, почему должна ругаться?я не вижу тута ошиболк
Поддерживаю

quix, переформулируй вопрос, что ты хочешь получить? какую цель преследуешь?

JOHN_16
К тому же вы не самым лучшим образом проверяете (ИМХО + документация)
Соглашусь , что в данной ситуации сначала лучше записать значение в переменную через метод словаря get(), а потом в условиях проверять эту же переменную. Но проверка словаря на то, имеет ли он данный ключ или нет - вполне себе используемый способ, да и человеку будет так понятнее(более явно видно).

Офлайн

#7 Апрель 29, 2013 17:27:49

quix
Зарегистрирован: 2012-06-23
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка параметра в request.GET

Я передаю “левый” параметр

<input type="text" name="iiii">

а функция принимает ‘q’

Думаю, должно быть ругательство? То что этот метод проверки приметивет - верю.
Спасибо за другой варианты проверки.

Офлайн

#8 Апрель 29, 2013 19:08:16

buddha
От:
Зарегистрирован: 2012-03-02
Сообщения: 422
Репутация: +  15  -
Профиль   Отправить e-mail  

Проверка параметра в request.GET

Убери условие из кода функции представления в первом посте:

if 'q' in request.GET:
и будет тебе ожидаемый результат - ошибка=)

А так мыслишь правильно, в том смысле, что подменяешь всякие значения , чтобы осмыслить , как выполняется код и что он делает…

Отредактировано buddha (Апрель 29, 2013 19:09:20)

Офлайн

#9 Апрель 29, 2013 19:29:07

quix
Зарегистрирован: 2012-06-23
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка параметра в request.GET

Делаю то по книжке. В книжке так сделано, как в первом посте только без iiii. Подсовываю iiii - не ругается…
Лана….

Спасибо.

Отредактировано quix (Апрель 29, 2013 19:32:37)

Офлайн

#10 Апрель 29, 2013 19:39:35

buddha
От:
Зарегистрирован: 2012-03-02
Сообщения: 422
Репутация: +  15  -
Профиль   Отправить e-mail  

Проверка параметра в request.GET

quix
Делаю то по книжке. В книжке так сделано, как в первом посте только без iiii. Подсовываю iiii - не ругается… Лана…. Спасибо.

Ну видно, что ты пока не понимаешь совсем , что делаешь, хотя все ответили тебе верно…
Читай, делай, скоро врубишься…

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version