二十六、登录相关

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 @   Bruce_JRZ  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示