Найти - Пользователи
Полная версия: Проверка параметра в request.GET
Начало » Django » Проверка параметра в request.GET
1 2
quix
Здравствуйте, я ЧАЙНИК! Делаю уроки по учебнику Головатый и компания.
Вот такая вот фигня вначале функция проверяет параметр ‘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>

Спасите помогите! застрял, пока не заработает дальше не пойду …
ilnur
а в чем проблема?
На ваш взгляд, почему должна ругаться?
я не вижу тута ошиболк
quix
Функция ждет ‘q’ а я ей пихаю
<input type="text" name="iiii">
JOHN_16
quix
ну вот вам простой прием проверки: сделайте
def search(request):# q находится в запросе формы метод GET
    raise Exception()
посомтрите на страницу ошибки, там есть пункт раскрывающий содержание GET и POST словарей, смотрите что у вас в GET.


К тому же вы не самым лучшим образом проверяете (ИМХО + документация), рекомендуется так:
value=request.GET.get('q')
Если в переменной value значение None, то параметра q там нет,в противном случае присвоется искомое значение
ilnur
quix
Функция ждет ‘q’ а я ей пихаю
функция не ждет q. а лишь проверяет его наличие. если его нет, то по коду, ничего не будет.
buddha
ilnur
а в чем проблема?На ваш взгляд, почему должна ругаться?я не вижу тута ошиболк
Поддерживаю

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

JOHN_16
К тому же вы не самым лучшим образом проверяете (ИМХО + документация)
Соглашусь , что в данной ситуации сначала лучше записать значение в переменную через метод словаря get(), а потом в условиях проверять эту же переменную. Но проверка словаря на то, имеет ли он данный ключ или нет - вполне себе используемый способ, да и человеку будет так понятнее(более явно видно).
quix
Я передаю “левый” параметр
<input type="text" name="iiii">

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

Думаю, должно быть ругательство? То что этот метод проверки приметивет - верю.
Спасибо за другой варианты проверки.
buddha
Убери условие из кода функции представления в первом посте:
if 'q' in request.GET:
и будет тебе ожидаемый результат - ошибка=)

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

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

Ну видно, что ты пока не понимаешь совсем , что делаешь, хотя все ответили тебе верно…
Читай, делай, скоро врубишься…
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB