如何要求登录访问任何URL django

时间:2017-04-21 15:32:56

标签: python django

我在views.py

中遇到了什么
 @login_required()
 def dadmin(request):

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

在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中?

2 个答案:

答案 0 :(得分: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'
]

答案 1 :(得分:0)

如果您在settings.py中设置了LOGIN_URL:

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

在访问其视图中带有login_required()装饰器的网址时,将重定向所有匿名用户。

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