Beispiel #1
0
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()})
Beispiel #2
0
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()})
Beispiel #3
0
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='无效的链接')
Beispiel #4
0
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/')