python - Django怎么让没登录的用户自动跳转到登录页?
高洛峰
高洛峰 2017-04-18 09:48:08
[Python讨论组]

是要每一个页面都写一遍跳转吗?
比如在/info页面可以跳转到登录页,但是/info/123这样的呢?
尝试写到上下文渲染器上,没成功。

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(3)
怪我咯

装饰器
from django.contrib.auth.decorators import login_required

如果django>=1.9,LoginRequiredMixin

好好看文档,百度google下都有结果。

迷茫

看错问题了,重新回答
这是一个装饰器

def login_required(function=None, redirect_field_name=REDIRECT_FIELD_NAME, login_url=None):
    """
    Decorator for views that checks that the user is logged in, redirecting
    to the log-in page if necessary.
    """
    actual_decorator = user_passes_test(
        lambda u: u.is_authenticated(),
        login_url=login_url,
        redirect_field_name=redirect_field_name
    )
    if function:
        return actual_decorator(function)
    return actual_decorator
黄舟

有多种方法可以实现:

使用Django自带的用户认证

from django.contrib.auth.decorators import login_required
@login_required
def homepage(request):
    pass

这样子使用即可。

使用middleware

class CustomAuthMiddleware(object):
def process_view(self, request, view_func, view_args, view_kwargs):
    if request.path.startswith('/no-auth'):
        return None
    if request.path.startswith('/need-auth'):
        return redirect('/no-auth/login/')
        

然后把自定义的middleware添加到settings.py中的MIDDLEWARE_CLASSES最后。

更加自由的,使用自己的修饰器来写。

def user_required(func):
@functools.wraps(func)
def first_wrapped(*args, **kwargs):
    auth_user_done_by_yourself(*args, **kwargs)  # 自定义认证方式
    return func(*args, **kwargs)
return first_wrapped
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号