У меня есть страница, которая берет параметры GET из своего URL и передает их непосредственно в REST API.Таким образом, URL-адрес страницы выглядит следующим образом:
foo.com/pizzas/?toppings=mushrooms&toppings=sausage
Когда страница загружается, она принимает параметры GET и передает их в API REST, например:
foo.com/totally/unrelated/url/?toppings=mushrooms&toppings=sausage
На бэкэнде яхочу извлечь их и отфильтровать на их основе.Это в основном то, что у меня есть сейчас:
# inside a django rest framework ModelViewSet
# it's not really relevant other than that self.request exists
def get_queryset(self):
queryset = self.model.objects.all()
for param in self.request.query_params:
# param = "toppings"
if not self.is_real_model_field(param): # assume this works
continue
param_value_list = self.request.query_params.getlist(param)
# param_value_list = ['mushrooms', 'sausage']
queryset = queryset.filter(
f"{param}__in": param_value_list
)
return queryset
Я сказал, что факт, что это Django Rest Framework, не имеет значения, но я не уверен на 100% в этом.В приведенном выше примере request.query_params
добавляется Django Rest Framework, но на основе документации DRF здесь Я считаю, что это просто псевдоним встроенного в Django request.GET
.
ИтакЭто безопасно делать в Джанго?Злоумышленник может напрямую манипулировать URL.Я предполагаю, что QuerySet.filter(field__in: values)
django автоматически выполнит некоторую очистку для вас, и / или ограниченный набор символов URL-адреса поможет предотвратить появление чего-либо неприятного, но я не смог найти никаких ресурсов, обсуждающих проблему.