gpt4 book ai didi

python - 如何清理 Django View 中的多个嵌套 if 语句

转载 作者:行者123 更新时间:2023-11-30 23:04:41 25 4
gpt4 key购买 nike

我正在开发一个 Django 项目,其中一个 View 看起来像这样,带有多个 if else 语句。有没有办法清理代码?我对 Django 比较陌生,我的一位 friend 建议使用装饰器。有人能告诉我如何在这里使用装饰器吗?或清理这段代码?任何链接或学习 Material 都会很棒。

if req.method == 'GET':
....# do stuff
elif req.method == 'POST':
....form = Form(req.POST)
....if form.is_valid():
........response = some_api_call(form.cleaned_data)
........if can_foobar(response):
............return JsonResponse({"status": "success"})
........else:
............return JsonResponse({"status": "failure", "reason": "couldn't foobar"})
....else:
........return JsonResponse({"status": "failure", "reason": "form invalid"})

最佳答案

当 Django 1.4 发布时(我认为是 1.4),他们夸耀了一个名为 Class-based Views 的新功能。 。您现在使用的称为基于函数的 View ,它们已经过时了,甚至没有专门介绍它们的 Django 文档部分。

文档很棒,但总而言之,基于类的 View 是一种使用类在不同部分中组织 View 内代码(现在位于函数中)的方法。

与基于函数的 View 相比,这带来了两个好处。

  1. 通过将每个功能分离到不同的类中来使代码更简洁。其最基本的形式是具有 get 方法和 post 方法,而不是 if-else 结构。
  2. 通过将不同类中的基本功能汇集在一起​​来重用代码。

例如,如果有一个类能够在调用 get 时自动呈现并返回表单,并自动验证表单并创建对象或其他内容并重定向到成功页面,那该多棒啊当一切顺利时?

好吧,Django 附带了这些类型的抽象,在本例中为 FormView 。更好的是,FormView 在表单有效时执行名为 form_valid 的方法,在表单无效时执行名为 form_invalid 的方法,为您提供了一种理想的方式来完成您想要的操作。基本上,您必须编写的唯一代码就是您的 some_api_call 调用和 JsonResponses!

(我给出的重定向到成功 URL 的示例是 FormView 的默认使用,您只需在其中定义所述 success_url。这是文档中的第二个示例)。

PS:如果您正在使用 JSON,我强烈建议使用 Django Rest Framework ,这基本上是 API 调用的基于类的 View 。真是太美了。

关于python - 如何清理 Django View 中的多个嵌套 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33584418/

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