我应该使用中间件还是为此写一个装饰器?

时间:2011-06-24 19:52:42

标签: django

我的情况是,用户将被要求输入他们的邮政编码,一旦他们这样做,他们就被重定向到网站,其内容与他们输入的邮政编码相关。会有类别等。简而言之,用户将看到仅与其所在区域相关的内容。

计划 - 我想将他们的邮政编码存储在一个cookie中,并在每次回到网站时重复使用它,当然如果没有邮政编码,他们应该被指示在表格中输入。表格将在任何其他内容出现之前出示。

我的问题是我应该使用装饰器并使用自定义装饰器装饰视图吗?还是应该写中间件?如果我为此编写一个自定义中间件,我应该使用process_request process_view,在我看来,每次请求都会调用process_request,这可能会造成问题。

谢谢!

JeffC

2 个答案:

答案 0 :(得分:5)

如果你想避免重复,你需要编写一个中间件。如果它像你说的那样在每个页面上,并且邮政编码是使用该网站的先决条件,那么在每个请求上调用process_request并不一定是坏事。

另一方面,这有必要吗?您的网址不能只读为:/blah/12345/videos/吗?然后,您的用户可以只重新登录该页面,而不必依赖cookie作为书签。这也会否定你必须写一个视图。

答案 1 :(得分:2)

这里的主要问题是您需要多久使用一次Cookie中的邮政编码。它会影响整个网站吗?或者只是其中的一部分?

如果“ZIP-oriented”内容仅用于一个部分(一个或多个,但不是整个应用程序),那么请选择装饰器。它应该检查cookie以及它是否不存在 - 重定向到ZIP选择表单。如果它存在 - 继续处理您将能够访问邮政编码的视图并相应地使用它。

如果邮政编码确实会影响您的大部分服务,并且您不想装饰每一个视图 - 您可以选择中间件。但你是对的 - 每次请求都会调用它,所以一定要确保它是绝对必要的。