我是Django网站的开发人员,该网站将对大多数网页进行SSO,我广泛使用基于类的视图,official documentation说我们可以用以下方式装饰基于类的视图:
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
from django.views.generic import TemplateView
class ProtectedView(TemplateView):
template_name = 'secret.html'
@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
return super(ProtectedView, self).dispatch(*args, **kwargs)
我已经实现了一个定制的sso_login_required
修饰符,但是由于我的大多数页面都将执行SSO,我认为对我的大多数视图执行上述操作绝对不是正确的方法,我在考虑在全局级别执行此操作,我想我有两个选项来实现/覆盖上面的分派方法:
BaseView
继承的django.views.generic.base.View
类,并让我的所有视图从这个定制的BaseView继承。你知道吗django.views.generic.base.View
的dispatch
方法根据我的要求,这里的最佳实践是什么(大多数页面的SSO)?如有任何推荐或建议,我们将不胜感激!你知道吗
正如您所说,使用继承似乎是一种可行的方法,您可以将您的逻辑实现为mixin:
然后在其他项目视图中,可以执行以下操作:
使用mixin可能比将此逻辑放在项目
BaseView
中更方便,特别是如果您有一些不需要SSO的视图,或者希望在不从BaseView
继承的视图中使用此逻辑。你知道吗相关问题 更多 >
编程相关推荐