<p>From<a href="http://ccbv.co.uk/projects/Django/1.8/django.views.generic.base/View/" rel="nofollow">ccbv.co.uk</a>和From<a href="https://docs.djangoproject.com/en/1.8/ref/class-based-views/base/#view" rel="nofollow">Django Class-bases views docs</a>,<code>dispatch()</code>是类基视图中调用的第一个方法。在</p>
<p>查看类工作流</p>
<ol>
<li>调度()</li>
<li>http方法不允许()</li>
<li>选项()</li>
</ol>
<p><strong>请记住,所有泛型视图都继承视图类</strong></p>
<p>中间件是一个很好的解决方案,但是如果您不需要预处理每个请求,您可以使用<strong>访问mixin</strong>。在</p>
<p>正如我前面所说,<code>dispatch()</code>是第一个执行的方法,因此您可以重写它来授予或拒绝对视图的访问。在</p>
<p>以下是<code>dispatch</code>默认代码:</p>
<pre><code>def dispatch(self, request, *args, **kwargs):
# Try to dispatch to the right method; if a method doesn't exist,
# defer to the error handler. Also defer to the error handler if the
# request method isn't on the approved list.
if request.method.lower() in self.http_method_names:
handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
else:
handler = self.http_method_not_allowed
return handler(request, *args, **kwargs)
</code></pre>
<p>您可以编写<code>mixin</code>类:</p>
^{pr2}$
<p>然后可以在视图中使用它。让我们假设一个<code>ListView</code>:</p>
<pre><code>from django.views.generic import ListView
from somewhere import SuperuserRequiredMixin
class MyView(ListView, SuperuserRequiredMixin):
...
# Do what you usually do...
</code></pre>
<p>我希望你觉得这个有用。在</p>