在Django中的视图之间共享代码

时间:2011-08-03 04:30:27

标签: django views

请原谅我,如果反复询问,但我无法在任何地方找到这样的例子。

我很难理解如何在Django中的视图函数之间共享代码。例如,我想检查用户是否在许多视图中进行了身份验证。如果他们不是,我想记录有关该请求的一些信息(IP地址等),然后显示有关需要身份验证的预制消息。

关于如何实现这一目标的任何建议?

3 个答案:

答案 0 :(得分:2)

您可以在函数中编写这些代码,然后在许多视图中调用它们 例如:

def check_login():  
     pass  
def view1():
     check_login()  
     pass  
def view2():
     check_login()  
     pass

答案 1 :(得分:1)

这可能最好通过创建utils.py文件而不是视图来完成。不返回HTTPResponse对象的视图在技术上无效。

请参阅:https://docs.djangoproject.com/en/dev/intro/tutorial03/#write-views-that-actually-do-something

  

“每个视图负责执行以下两项操作之一:返回包含所请求页面内容的HttpResponse对象,或者引发异常,例如Http404。” ......“所有Django想要的是HttpResponse。或者例外。”

如果视图没有返回HttpResponse,Heroku将抛出错误。

在这个例子中我通常做的是在一个名为utils.py的单独文件中编写一个函数并导入它并从需要它的应用程序文件中使用它。

from utils import check_login

def view1(request):
     check_login(request)  
     pass  
def view2(request):
     check_login(request)  
     pass

答案 2 :(得分:0)

一个简单的解决方案是使用装饰器,就像在django的login_required中一样,但是如果你需要更复杂的东西,你可能需要像class based views

这样的东西。