python - Django 在 url 查询中需要参数

标签 python django

是否有机会指定 url 查询中需要哪些参数并自动将它们传递到 View 函数中?

在 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 路径不是解决方案,因为“部分”值可能包含各种额外字符,例如斜杠等。

最佳答案

你可以编写一个装饰器:

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

关于python - Django 在 url 查询中需要参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59287690/

相关文章:

python - 如何将 Jupyter Notebook 单元格中的错误保存到文件中?

python - 当从具有多索引列的 DataFrame 中提取系列时,我无法使用 read_csv 读取

python - 如何根据 Graphene/Django 上的用户类型限制模型的字段访问?

python - 值错误 : too many values to unpack in Django models

python - 如何在 Django 管理中测试覆盖函数?

python - 我的 python 脚本中的枚举没有按预期工作?

python - ipython 序列解包的奇怪行为

python - 使用 sox 在 Django 表单类中修剪声音文件

python - 如何将 urlencode 更改为 python 字典

python - 解析包含创建 Django Q 对象逻辑的字符串