2017-04-21 20 views
0

我有蒂斯views.py如何索要登录访问任意URL的Django

@login_required() 
def dadmin(request): 

我没有使用过@login_required()在dapost和dapage

而且在url.py

url(r'^dadmin/$', dadmin, name='dadmin'), 
url(r'^dadmin/post/$', dapost, name='dapost'), 
url(r'^dadmin/page/$', dapage, name='dapage'), 

现在我想要的是每当用户尝试访问domain.com/dadmin/any ...它重定向到登录页面。我该怎么做?没有将@login_required()放在dapost和dapage中?

回答

1

您可以通过使用自定义的中间件

保存为custom_middleware.py文件在你的主应用程序

from django.shortcuts import redirect 


class CheckUser(object): 

    def __init__(self, get_response): 

     self.get_response = get_response 

    def __call__(self, request): 

     if not request.user.is_authenticated() and \ 
         request.path.startswith('/dadmin/'): 
      return redirect("/login/") 

     response = self.get_response(request) 


     return response 

,并在您settings.py编辑做了middleware

MIDDLEWARE = [ 
    'django.middleware.security.SecurityMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
    #custom middlewares 
    'app.custom_middleware.CheckUser' 
] 
+0

它工作。 SyntaxError:在Python3中调用'print'时缺少圆括号___ **修复python3 **'print'init工作“'到'print(”init working“)'谢谢! –

+0

@DevkotaSagar删除该行打印(“init工作”)。我用于调试 – Thameem

+0

好的,那么可以def __init __(self,get_response):也被删除? –

0

如果您在settings.py设置LOGIN_URL:

https://docs.djangoproject.com/en/1.8/ref/settings/#login-url

所有匿名用户将在他们的意见login_required()装饰访问到的网址时被重定向。

编辑:你可以制作一个自定义的LoginRequiredMiddleware,也可以使用你想要的路径。

+0

我想重定向到登录到像.com/dadmin/post或.com/dadmin/page或.com/dadmin /(任何)访问的任何链接。不仅仅是来自views.py –

+0

你为什么不把装饰器放在dapost,dapage和所有需要这种行为的视图中? – XaviP

+0

您也可以制作自定义的LoginRequiredMiddleware,并提供您所需的路径。在答案中编辑。 – XaviP