Django测试登录模块无法验证?

时间:2017-07-23 12:46:30

标签: python django testing

我想测试登录重定向,但我使用客户端发布用户名和密码,登录验证失败,我调整了很长时间。我不知道为什么!

视图:

def index(request, **kwargs):

    username = kwargs.get('username', 'anyone')
    return render(request, "index.html", {'username': username})

def login(request):

    """user sign in"""
    if request.method == "GET":
        form = LoginForm()
        return render(request, "login.html", {'uf': form})
    else:
        form = LoginForm(request.POST)
        if form.is_valid():
            username = request.POST.get("username")
            password = request.POST.get("password")
            user = auth.authenticate(username=username, password=password)
            if user is not None and user.is_active:
                auth.login(request, user)
                request.session['uid'] = user.id
                return render(request, 'index.html', {'username': username})
            else:
                return render(request,
                              'login.html',
                              {'form': form, 'password_is_wrong': True, 'error': 'Pls, Resubmit'})
        else:
            return render(request, 'login.html', {'form': form})

试验:

def test_login_right(self, username='admin', password='zg123456'):
    """ POST right username or password """
    setup_test_environment()
    client = Client(enforce_csrf_checks=False)

    url = '/login/'
    response = self.client.post(url,
                                data={'username': username,
                                      'password': password},
                                secure=True,
                                follow=True)
    status_code = response.status_code
    self.assertNotIn(str(status_code)[0], ['4', '5'])
    self.assertIn('Welcome', response.content.decode('utf8'))

我发现做测试,auth.authenticate返回None,但我使用brower身份验证返回不是None,我不知道为什么,一个保护机制?我必须使用client.login func?

1 个答案:

答案 0 :(得分:0)

感谢@Daniel Roseman @ohannes

我没有为用户创建测试环境,

添加测试用户,它有效!

这是我添加的代码:

public static int p2 = 0;
public static int p1 = 0;
  

manage.py createsuperuser,在默认数据库中创建用户。 manage.py test创建一个新的空数据库(不包含该超级用户)。要让用户进入测试数据库,您必须在测试代码中创建它(在测试函数或setUp中) - ohannes

by ohannes