gpt4 book ai didi

python - Django Rest Framework,在url中传递属性

转载 作者:太空宇宙 更新时间:2023-11-03 12:05:43 24 4
gpt4 key购买 nike

所以我有这两个模型:

class ProductQualityMonitor(models.Model):

product_name = models.CharField(..)
area = models.CharField(...))
timeslot = models.DateTimeField(...)

def get_measured_parameters(self):
(...)

class QualityParameter(models.Model):
PARAMETER_CHOICES = (
(MEAN, MEAN),
(MEDIAN, MEDIAN),
(MAXIMUM, MAXIMUM),
(MINIMUM, MINIMUM),
)

name = models.CharField(max_length=50, choices=PARAMETER_CHOICES)
value = models.FloatField()
product = models.ForeignKey(ProductQualityMonitor,
related_name="parameters")

我需要获得一些关于质量参数的汇总统计数据。我有一个方法接收一些属性,比如日期范围,并为每个参数十乘十地聚合统计数据,最后返回一个包含所有聚合统计数据的 json 对象。

我的疑问是:我可以调用这个方法,在url中传递该方法需要的参数,然后看到结果吗?而且,如果可以的话,我该怎么做?

对不起,如果我的解释有点乱,我是 Django 的新手。

最佳答案

我为 Django REST 框架从 URL 传递属性的两种方法:

1。来自 URL 路径

示例网址:http://127.0.0.1:8000/myurl/passthisstringfrompath

在 urls.py 中(假设属性是一个字符串):

urlpatterns = [
path('myurl/<str:myattribute1>/', MyRestApiView.as_view()),
]

在 views.py 中:

class MyRestApiView(APIView):
def get(self, request, *args, **kwargs):
if kwargs.get("myattribute1", None) is not None:
print("the passed attribute:", kwargs["myattribute1"]) # this should print "passthisstringfrompath"
return Response()
def post(self):
pass

参数 *args 和 **kwargs 是传递未定义数量的列表 (*args) 和字典 (**kwargs) 对象的 Python 方式,类似于 C++ 中的 Args...,更多信息 here .这是因为在基于类的 View 中,URL 参数是从这个 kwargs 中获取的,更多信息 here .

2。来自 URL 查询参数

示例网址:http://127.0.0.1:8000/myurl/?myattribute1=passthisstringfromparam

在 urls.py 中:

urlpatterns = [
path('myurl/', MyRestApiView.as_view()),
]

在 views.py 中:

class MyRestApiView(APIView):
def get(self, request):
if request.GET.get("myattribute1", None) is not None:
print("the passed attribute:", request.GET["myattribute1"]) # this should print "passthisstringfromparam"
return Response()
def post(self):
pass

或者更好的是,按照 https://www.django-rest-framework.org/api-guide/requests/ 下的 Django 文档中的建议使用“query_params”通过将“request.GET”的所有实例逐字替换为“request.query_params”,然后其他一切都相同。

附加信息

当然,您可以结合以上两种方式来支持两者结合的 URL,例如:http://127.0.0.1:8000/myurl/passthisstring/?mynextattribute=thenthissecond&mylastattribute=andthenthislast

地点:

  • kwargs["myattribute1"] = "passthisstring"
  • request.query_params["mynextattribute"] = "thenthissecond"
  • request.query_params["mylastattribute"] = "andthenthislast"

注意 urlpatterns 的顺序不要相互混淆,总是把更具体的放在列表的前面:

urlpatterns = [
path('myurl/<str:myattribute1>/', MyRestApiView.as_view()),
path('myurl/', MyRestApiView.as_view()),
]

或者更好的是,您还可以将此 urlpatterns 简化为一个模式,该模式考虑了输入属性是可选的情况:

urlpatterns = [
re_path('myurl/(?:(?P<myattribute1>\w+)/?)?', MyRestApiView.as_view()),
]

请注意末尾的斜杠/,以便以下 URL 指向相同的资源:

关于python - Django Rest Framework,在url中传递属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32995346/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com