Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django在url查询中需要参数_Python_Django - Fatal编程技术网

Python Django在url查询中需要参数

Python Django在url查询中需要参数,python,django,Python,Django,是否有机会指定url查询中需要哪些参数并自动将其传递到视图函数中 在URL.py中,我希望有如下内容: path('get_part_info?<part>', views.get_part_info, name='get_part_info'), def get_part_info(request, part): # do something with part return JsonResponse({'result': part}) 这个想法是为了避免像:p

是否有机会指定url查询中需要哪些参数并自动将其传递到视图函数中

在URL.py中,我希望有如下内容:

path('get_part_info?<part>', views.get_part_info, name='get_part_info'),
def get_part_info(request, part):
    # do something with part
    return JsonResponse({'result': part})
这个想法是为了避免像:part=request.GET.GET('part')这样丑陋的构造


URL路径不是一个解决方案,因为“part”值可以有各种额外字符,如斜杠等。

您可以编写装饰程序:

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或使用默认值。

为什么你考虑<代码>请求?获取?获取(“部分”)< /代码>丑陋?因为每次添加新变量时,都需要手动编写相似代码。不,Django有可能使用url路径,比如path('get_part_info/',views.get_part_info,name='get_part_info'),但在这种情况下,“part”不能包含像slashes这样的任何额外字符。您可以用默认值初始化
args
dict,并用
请求更新它。get
。这样,您可以将所有默认设置保留在视图顶部的一个位置。谢谢Daniel!是的,这是一个很好且优雅的解决方案。