Django和python 2.7在表单错误中出现unicode问题

时间:2017-03-02 19:58:42

标签: django testing unicode

我正在开始TDD创意的新项目,所以首先我写了测试。但我对utf(我认为)有一个问题

我有简单的登录表单

from django.utils.translation import ugettext_lazy as _

ERRORS_MESSAGES = {
    'not_active': _(u"Użytkownik nie jest aktywny"),
    'user_not_exist': _(u"Użytkownik o podanym loginie już istnieje")
}


class LoginForm(forms.Form):
    username = forms.CharField(max_length=50)
    password = forms.CharField(max_length=50, widget=forms.PasswordInput)

    def clean(self):
        username = self.cleaned_data.get('username')
        password = self.cleaned_data.get('password')
        user = authenticate(username=username, password=password)
        if not user:
            raise forms.ValidationError(ERRORS_MESSAGES['user_not_exist'])
        if not user.is_active:
            raise forms.ValidationError(ERRORS_MESSAGES['not_active'])
        return self.cleaned_data

在测试中:

user = User.objects.create(
    username='asd', password='asd', email='asd@ad.asd'
)
form = LoginForm(data={'username': 'asd', 'password': 'asd'})
self.assertEqual(form.is_valid(), False)
print "ERRORS:", form.errors['__all__']
self.assertIn(ERRORS_MESSAGES['not_active'], form.errors)

和控制台输出:

# here, char 'ż' looks fine, 
ERRORS: <ul class="errorlist nonfield"><li>Użytkownik o podanym loginie już istnieje</li></ul>
# but next:
self.assertIn(ERRORS_MESSAGES['not_active'], form.errors)

AssertionError:在{' all '中找不到:[u'U \ u017cytkownik o podanym loginie ju \ u017c istnieje']}

1 个答案:

答案 0 :(得分:0)

你放了

#-*- encoding: utf-8 -*-

在文件的第一行?

编辑: 根据消息,我可以假设已经有 asd 名称的用户。