множественный параметр в запросе get в django - PullRequest
0 голосов
/ 29 января 2020

url.py

urlpatterns = [
    path('api_doc/', schema_view),
    path('admin/', admin.site.urls),
    # regex for swagger creation
    path(r'^request.GET.get(‘tag’)&request.GET.get(‘order_by’)', views.QuestionList.as_view()),
    # path(r'^?tag={tag}&order_by={name}', views.QuestionList.as_view()),
]

Это файл mu url.py, и я пытаюсь ввести "tag" и "order_by" в URL в swagger, но он не работает? я пробовал выше варианты URL

В последнем "?" не пересматривается по URL.

1 Ответ

0 голосов
/ 29 января 2020

Строка запроса [wiki] является , а не частью пути. Таким образом, вы не можете захватить или проверить это в urlpatterns. Ваш путь выглядит следующим образом:

path('', views.QuestionList.as_view())

По вашему мнению, вы можете соответствующим образом отфильтровать набор запросов:

from django.views.generic.list import ListView
from app.models import Question

class QuestionList(ListView):
    model = Question

    def get_queryset(self, *args, **kwargs):
        qs = super().get_queryset(*args, **kwargs)
        if 'tag' in <b>self.request.GET</b>:
            qs = qs.filter(tag__id=<b>self.request.GET['tag']</b>)
        if 'order_by' in <b>self.request.GET</b>:
            qs = qs.order_by(<b>self.request.GET['order_by']</b>)
        return qs

При этом вы вводите уязвимость в систему безопасности, допуская произвольное определение.

Более того, возможно, стоит взглянуть на django-filter [GitHub] , чтобы выполнить фильтрацию на основе QueryDict в более декларативной форме.

...