В настоящее время я могу отобразить все годы выпуска для всех фильмов в базе данных. Пользователь может выбрать год и посмотреть все фильмы, выпущенные в этом году. Или я могу показать все жанры фильма. Пользователь может выбрать жанр и просмотреть все фильмы, которые соответствуют этим критериям. Я построил форму, в которой пользователь может динамически выбирать свои критерии. Так, например, «Дата выпуска» «после» «2000» вернет отфильтрованный список.
Я написал НЕЗАКОННЫЙ код jquery / django для передачи фильтров в базу данных. Благодаря комбинации выпадающих и пользовательских полей ввода (точно так же, как в iTunes), я использую jquery для создания фильтра.
В качестве примера, скажем, пользователь выбирает в первом раскрывающемся списке: «Год». Для второго выпадающего: "есть". Последнее - это поле ввода, в котором пользователь вводит «2005». Этот критерий помещается в массив:
dictionary:
[
{"includes": [["year__iexact", "2005"]],
"excludes": []},
"all"
]
«включает» / «исключает» отделяет такие критерии, как «есть», «стоит до» от таких вещей, как «нет»
«all» означает, что фильтр должен «соответствовать всем», а не «соответствовать любому»
Это преобразуется в JSON:
[{"includes":[["year__iexact","2005"]],"excludes":[]},"all"]
и опубликовано в Django.
Представление в django затем помещает данные в фильтр:
incdict[ filter[0].encode('utf-8') ] = filter[1].encode('utf-8')
Это становится:
incdict[ 'year__iexact' ] = 2005
Это подается в запрос (как указано здесь :
query_set = Film.objects.filter(**incdict)
Хорошо, я надеюсь, это было ясно. Теперь я спрашиваю, как защититься от недобросовестного пользователя, который пытается обойти / использовать входные данные. Нужно ли бежать от специальных символов? Проверка данных? Каков наилучший способ защиты системы?