二十六、登录相关

def login(request):
    if request.method == 'GET':
        form = account.LoginForm()
        return render(request, 'login.html',{'form':form })
    else:
        form = account.LoginForm(request.POST)
        result = {'status': False, 'message': None, 'errors': None}
        if form.is_valid():
            name = form.cleaned_data['username']
            pwd = form.cleaned_data['password']
            userInfo = models.UserInfo.objects.filter(name=name,password=pwd).first()
            if userInfo:
                request.session['UserInfo'] = name
                return redirect('/')
            else:
                result['errors'] = '用户名或密码错误' # 这里是不兼容的地方,这个错误html不知道怎么显示给用户
            return render(request, 'login.html', {'form': form})
        else:
            return render(request, 'register.html', {'form': form})
def logout(request):
    request.session.clear()
    return redirect('/')
def index(request):
    // sessionid 未登录就已经有,因为进行http请求就是一次会话,未登录,session也有其它值在记录着
    username = request.session.get('UserInfo')  // 直接拿。不需要从cookies中拿sessionid,再拿session,底层已经做好
    return render(request, 'index.html', {'username':username})
#一个月免登录
...登录成功,session除了保存用户信息,还设置session有效时间
if request.POST.get('rmb'): # 勾选了checkbox才会发送过来
    request.session.set_expiry(60*60*24*30) # 设置session有效期为一个月
SESSION_COOKIE_AGE = 60 * 60 * 24  #Session的cookid失效日期(2周)(默认)
SESSION_SAVE_EVERY_REQUEST = True #是否每次请求都保存Session,默认修改之后才保存

登录装饰器

def check_login(func):
    def inner(request, *args, **kwargs):
        if request.session.get('user_info'):
            return func(request, *args, **kwargs)
        else:
            return redirect('/login.html')
    return inner

Django 默认登录url

setting.py中
LOGIN_URL = '/login/' # 跳转登录时,django会跳转到默认路径。这里修改用具体项目的登录页路径

posted @ 2024-02-12 17:38  Bruce_JRZ  阅读(10)  评论(0)    收藏  举报