Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何清理Django视图中的多个嵌套if语句_Python_Django_Django Views_Decorator_Python Decorators - Fatal编程技术网

Python 如何清理Django视图中的多个嵌套if语句

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

我正在处理一个Django项目,其中一个视图与多个if-else语句类似。有没有办法清理代码?我对Django比较陌生,我的一个朋友建议使用装饰器。有人能告诉我怎么使用装饰器吗?或者清理这个代码?任何链接或学习材料都会很好

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的默认用法,在该示例中,您只需定义said
    success\uURL
    。这是文档中的第二个示例)


    PS:如果您正在使用JSON,我强烈建议您使用JSON,它基本上是用于API调用的基于类的视图。很漂亮。

    酷,我会调查一下。我尽量解释一下。但我最近发现我很难解释,但我希望这能有所帮助。