def login(request): ''' 登录 ''' if request.method == 'POST': form = forms.LoginForm(request.POST) # check username key = request.POST.get('username') pw = request.POST.get('passwd') if key and pw: user = None try: user = User.objects.get(username=key) except: try: user = User.objects.get(stu_code=key) except: pass if user and user.match_passwd(pw): set_user(request, user) messages.info(request, '登录成功') return redirect('/home/') messages.warning(request, '用户名或密码错误') return render(request, 'login.html', locals()) return render(request, 'login.html', {'form': forms.LoginForm()})
def register(request): ''' 注册 ''' if request.method == 'POST': form = forms.RegisterForm(request.POST) # check if user exists if User.objects.filter(username=request.POST.get('username')): form.add_error('username', '用户名已被注册') if User.objects.filter(stu_code=request.POST.get('stu_code')): form.add_error('stu_code', '学号已被注册') if request.POST.get('passwd') != request.POST.get('pw2'): form.add_error('pw2', '两次密码输入不同') # input validation if form.is_valid(): # register new user new_user = User() new_user.username = form.cleaned_data['username'] new_user.stu_code = form.cleaned_data['stu_code'] new_user.real_name = form.cleaned_data['name'] new_user.set_passwd(form.cleaned_data['passwd']) set_user(request, new_user) messages.info(request, '注册成功') return redirect('/validate/') else: # invalid input messages.warning(request, '请检查非法输入') return render(request, 'register.html', locals()) return render(request, 'register.html', {'form': forms.RegisterForm()})
def forgotpasswd(request, code=None): if code == None: # 验证页面 form = forms.ForgotPasswdForm() # 判断发送邮件逻辑 if request.method == 'POST': form = forms.ForgotPasswdForm(request.POST) # 检查用户名与学号匹配情况 if form.is_valid(): name = request.POST.get('username') code = request.POST.get('stu_code') try: user = User.objects.get(username=name, stu_code=code) except: form.add_error('username', '用户名与学号不匹配') form.add_error('stu_code', '用户名与学号不匹配') else: # 小组用户无邮箱 if user.is_team: return sorry(request, text=[ '小组用户不可通过邮箱重置密码', '若忘记密码请联系课程团队', ]) # 发送邮件 if form.is_valid(): send_valid_email(user, request, 'forgotpw') return redirect('/login/') else: messages.warning(request, '请检查非法输入') return render(request, 'forgotpasswd.html', locals()) else: try: checker = UserResetPwMail.objects.get(check_hash=code) if timezone.now() > checker.send_time + timezone.timedelta( settings.EMAIL_VALID_LAST_DAYS): raise ValueError form = forms.ResetPasswdForm() if request.method == 'POST': form = forms.ResetPasswdForm(request.POST) if request.POST.get('new_passwd') != request.POST.get( 'new_pw2'): form.add_error('new_pw2', '两次密码输入不同') if form.is_valid(): checker.user.set_passwd(form.cleaned_data['new_pw2']) set_user(request, checker.user) messages.info(request, '密码已重设') checker.delete() return redirect('/home/') messages.warning(request, '请检查非法输入') return render(request, 'changepasswd.html', locals()) except: return sorry(request, text='无效的链接')
def activate(request, code): ''' 激活电子邮件指向 ''' try: checker = UserMailCheck.objects.get(check_hash=code) if timezone.now() > checker.send_time + timezone.timedelta( settings.EMAIL_VALID_LAST_DAYS): raise ValueError checker.user.email_validated = True checker.user.save() set_user(request, checker.user) messages.info(request, '用户已激活') checker.delete() except Exception as e: messages.warning(request, '无效的激活链接') return redirect('/home/')