Django пустые сообщения об ошибках - PullRequest
2 голосов
/ 18 марта 2012

У меня есть вид входа в ajax.Я могу войти в систему нормально, но когда я вхожу неправильно, мой json возвращает: {"errors": {}} Мой взгляд выглядит следующим образом:

def ajaxlogin(request):
    from forms import LoginForm
    form = LoginForm(request.POST)
    logged_in = False
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(username=username, password=password)
    if request.is_ajax() and user is not None:
        login(request, user)
        logged_in = True
        return HttpResponse(simplejson.dumps({'redirect' : 'true'}), content_type='application/json')
    else:
        return HttpResponse(simplejson.dumps({'errors': dict(form.errors.items())}), content_type='application/json')

Любые идеи?

Если я используюфункция входа в систему без включенной js формы отображает все соответствующие сообщения об ошибках.

My LoginForm:

from django import forms
from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth import authenticate
from django.utils.translation import ugettext_lazy as _

class LoginForm(AuthenticationForm):
    username = forms.CharField(min_length=5, max_length=30,error_messages={'required':_("please enter a username"), 'min_length':_("username must be at least 5 characters"), 'max_length':_("username must be at less than 30 characters")})
    password = forms.CharField(min_length=6, error_messages={'required':_("please enter a password"), 'min_length':_("password must be at least 6 characters")})

    def clean(self):
        username = self.cleaned_data.get('username')
        password = self.cleaned_data.get('password')

        if username and password:
            self.user_cache = authenticate(username=username, password=password)
            if self.user_cache is None:
                raise forms.ValidationError(_("you have entered an incorrect username and/or password"))
            elif not self.user_cache.is_active:
            raise forms.ValidationError(_("This account is inactive."))
        self.check_for_test_cookie()
        return self.cleaned_data

Ответы [ 2 ]

2 голосов
/ 18 марта 2012

Вы не показали нам, как выглядит ваша LoginForm. Предполагая, что у него всего два CharField с, я не ожидал бы никаких ошибок, если вы указали имя пользователя и пароль.

Чтобы отобразить ошибки для недопустимой комбинации имени пользователя и пароля, ваша форма должна содержать логику для аутентификации данных для входа.

К счастью, вам не нужно писать это самостоятельно, вы можете использовать встроенный в Django AuthenticationForm. Он вернет ошибку, если имя пользователя и пароль неверны.

from django.contrib.auth.forms imoirt AuthenticationForm
from django.contrib.auth import login as auth_login

# in the view
if request.method == "POST":
    form = AuthenticationForm(data=request.POST)
    if form.is_valid():
        # if the form is valid, the user has provided a valid 
        # username and password. We can get the user with the 
        # form.get_user method and log them in
        auth_login(request, form.get_user())
        # return suitable ajax responses
0 голосов
/ 15 января 2013

попробуйте что-то вроде:

return HttpResponse(simplejson.dumps({'errors': form.errors.as_text()}), content_type='application/json')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...