Python Django在url查询中需要参数
是否有机会指定url查询中需要哪些参数并自动将其传递到视图函数中 在URL.py中,我希望有如下内容: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
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!是的,这是一个很好且优雅的解决方案。