簡體   English   中英

Django測試登錄模塊無法驗證?

[英]Django test login module can't be verified?

我想測試登錄重定向,但是我使用客戶端發布的用戶名和密碼,登錄驗證失敗,我調整了很長時間。 我不知道為什么!

視圖:

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,但是我使用瀏覽器authenticate返回不是None,我不知道為什么,一種保護機制?我必須使用client.login func嗎?

謝謝@丹尼爾·羅斯曼@ohannes

我沒有為用戶創建測試環境,

添加測試用戶,就可以了!

這是我添加的代碼:

from django.contrib.auth.models import User

class LoginViewsTests(TestCase):
    def setUp(self):
        self.adminuser = User.objects.create_user('test_001',
                                                  'test001@test.com',
                                                  'test1234')

manage.py createsuperuser,在默認數據庫中創建一個用戶。 manage.py測試將創建一個新的空數據庫(不包含該超級用戶)。 要在測試數據庫中擁有用戶,您必須在測試代碼中(在測試功能或setUp中)創建用戶-ohannes

由ohannes

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM