Django запрашивает параметры в URL-запросе - PullRequest
1 голос
/ 11 декабря 2019

Есть ли шансы указать, какие параметры требуются в URL-запросе, и автоматически передать их в функцию представления?

В urls.py я хотел бы получить что-то вроде этого:

path('get_part_info?<part>', views.get_part_info, name='get_part_info'),

И в views.py иметь что-то вроде этого:

def get_part_info(request, part):
    # do something with part
    return JsonResponse({'result': part})

Идея состоит в том, чтобы избежать уродливой конструкции, такой как: part = request.GET.get ('part')

URL-путьне является решением, потому что значение "part" может иметь различные дополнительные символы, такие как косая черта и т. д.

1 Ответ

1 голос
/ 11 декабря 2019

Вы можете написать декоратор:

from functools import wraps
from django.http import HttpResponseBadRequest, JsonResponse

def query_params(*param_names):
    def decorator(func):
        @wraps(func)
        def inner(request, *args, **kwargs):
            try:
                params = {name: request.GET[name] for name in param_names}
            except KeyError:
                return HttpResponseBadRequest("Missing Parameter")
            kwargs.update(params)
            return func(request, *args, **kwargs)

        return inner

    return decorator


@query_params("part")
def get_part_info(request, part):
    # do something with part
    return JsonResponse({"result": part})

Этот декоратор возвращает 400, если параметр отсутствует, но его можно изменить любым способом, например, перенаправить на другой URL или использовать по умолчанию. значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...