二十六、登录相关
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会跳转到默认路径。这里修改用具体项目的登录页路径

浙公网安备 33010602011771号