Python 如何清理Django视图中的多个嵌套if语句
我正在处理一个Django项目,其中一个视图与多个if-else语句类似。有没有办法清理代码?我对Django比较陌生,我的一个朋友建议使用装饰器。有人能告诉我怎么使用装饰器吗?或者清理这个代码?任何链接或学习材料都会很好Python 如何清理Django视图中的多个嵌套if语句,python,django,django-views,decorator,python-decorators,Python,Django,Django Views,Decorator,Python Decorators,我正在处理一个Django项目,其中一个视图与多个if-else语句类似。有没有办法清理代码?我对Django比较陌生,我的一个朋友建议使用装饰器。有人能告诉我怎么使用装饰器吗?或者清理这个代码?任何链接或学习材料都会很好 if req.method == 'GET': ....# do stuff elif req.method == 'POST': ....form = Form(req.POST) ....if form.is_valid(): ........response = som
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"})
当Django1.4问世时(我想是1.4),他们吹嘘了一个新特性,叫做。您现在使用的是基于函数的视图,它们太过时了,甚至没有Django文档中专门介绍它们的部分
文档很好,但总而言之,基于类的视图是一种通过使用类在不同部分组织视图(现在在函数中)内代码的方法
与基于函数的视图相比,这带来了两个好处
get
方法和post
方法,而不是if-else结构get
时自动呈现和返回表单,并自动验证表单并创建对象或其他内容,然后在一切正常时重定向到成功页面,那该类会有多棒
恩,在这种情况下,Django提供了这种抽象。更好的是,FormView在表单有效时执行一个名为form\u valid
的方法,在表单无效时执行一个名为form\u invalid
的方法,为您提供了一种理想的方法来做您想做的事情。基本上,您需要编写的唯一代码就是一些api调用
调用和JsonResponses
(我给出的重定向到成功URL的示例是FormView的默认用法,在该示例中,您只需定义saidsuccess\uURL
。这是文档中的第二个示例)
PS:如果您正在使用JSON,我强烈建议您使用JSON,它基本上是用于API调用的基于类的视图。很漂亮。酷,我会调查一下。我尽量解释一下。但我最近发现我很难解释,但我希望这能有所帮助。