django注册与登录问题?小白求教!

<p><p>问题:注册的账号无法登陆,创建的超级管理员账号可以登录,请教是什么问题? 使用Django自带的认证,create_user创建账号后 authenticate无法认证</p></p>

代码如下 注册 class RegisterView(View):

def get(self, request):
    return render(request, 'register.html')
def post(self, request):
    # 接受数据
    user_name = request.POST.get('user_name')
    password = request.POST.get('pwd')
    cpwd = request.POST.get('cpwd')
    email = request.POST.get('email')
    allow = request.POST.get('allow')
    # 数据校验
    # 是否数据完整
    if not all([user_name, password, cpwd, email]):
        return render(request, 'register.html', {'errmsg': '数据不完整'})
    # 邮箱是否正确
    result = re.match(r'^[a-z0-9][\w.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$', email)
    if not result:
        return render(request, 'register.html', {'errmsg': '邮箱错误'})
    # 密码与重复密码是否一致
    if password != cpwd:
        return render(request, 'register.html', {'errmsg': '两次密码不一致'})
    # 是否同意协议
    if allow != 'on':
        return render(request, 'register.html', {'errmsg': '请统一协议'})
    # 用户名是否存在
    try:
        user = User.objects.get(username=user_name)
    except User.DoesNotExist:
        user = None
    if user:
        return render(request, 'register.html', {'errmsg': '用户名已存在'})
    #业务处理
    user = User.objects.create_user(username=user_name, email=email, password=password)
    user.is_active = 0
    user.save()

    #加密文件
    serializer = Serializer(settings.SECRET_KEY, 3600)
    info = {'user_id': user.id}
    token = serializer.dumps(info)
    token = token.decode()
    # url = 'http://127.0.0.1/user/active/'+token.decode()
    #发邮件
    send_register_active_email(email, user_name, token)
    # 返回应答
    return redirect(reverse('goods:index'))

登陆

class LoginView(View):

def get(self, request):
    #是否记录用户名
    if request.COOKIES.get('user_name'):
        #获取用户名和记住状态
        user_name = request.COOKIES.get('user_name')
        checked = 'checked'
    else:
        user_name = ''
        checked = ''
    return render(request, 'login.html', {'user_name':user_name, 'checked':checked})
def post(self, request):
    #获取数据
    username = request.POST.get('username')
    password = request.POST.get('pwd')
    #校验数据
    if not all([password, password]):
        return render(request, 'login.html', {'errmsg': '数据不完整'})
    #1.验证手机号密码是否正确
    user = authenticate(username=username, password=password)
    if  user is not None:
        if user.is_active:
            #业务处理
            #登陆用户
            login(request, user)
            #是否记住用户名
            response = redirect(reverse('goods:index'))
            remember = request.POST.get('remember')
            if remember == 'on':
                #记住用户名
                response.set_cookie('user_name', username, 7* 24 * 3600)
            else:
                #删除cookie
                response.delete_cookie('user_name')
            return response
        else:
            return render(request, 'login.html', {'errmsg': '账号未激活'})
    else:
        return render(request, 'login.html', {'errmsg': '账号或密码错误'})

评论 1

  • 你注册时,把用户的默认active设置为0,然后你登陆的时候需要active为1,所以注册的登陆不了。