Django 之装饰器实现登录认证

Posted midworld

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django 之装饰器实现登录认证相关的知识,希望对你有一定的参考价值。

def check_login(func):  # 自定义登录验证装饰器
    def warpper(request, *args, **kwargs):
        is_login = request.session.get('is_login', False)
        if is_login:
            func(request, *args, **kwargs)
        else:
            return redirect("/login")
    return warpper
def login_user(request):
    if request.method == 'POST':
        form = LoginForm(request.POST)
        if form.is_valid():
            all_data = form.clean()   #获取post数据,例如 'username': u'yang1', 'password': 111
            exist = User.objects.filter(username = all_data['Form_username'],password = all_data['Form_password']).first()
            if exist:
                request.session['is_login'] = True  #设置session的随机字段值
                request.session['username'] = exist.username   #设置uname字段为登录用户
                return redirect('/home')
            else:
                return HttpResponse("账户或密码错误")
    else:
        form = LoginForm()
    return render(request, 'login.html', 'form': form)
 
@Check_Login
def home(request):
        username = request.session.get('uname', False)   #获取登录用户名
        return render(request, home.html', 'username': username) #用户名渲染到前端页面

以上是关于Django 之装饰器实现登录认证的主要内容,如果未能解决你的问题,请参考以下文章

Django之用户认证Auth组件

django的权限认证:登录和退出。auth模块和@login_required装饰器

django的auth认证,is_authenticate 和装饰器的2个方法,注销的功能,

CSIC_716_20200113Django入门---forms组件session和cookie登录认证装饰器

Django之session验证的三种姿势

Django之session验证的三种姿势