@yaseliwanoff

Почему не работает авторизация в Django?

я не понимаю почему я не могу авторизовать юзеров. После регистрации они записываются в БД, но затем при попытке авторизоваться у меня ничего не происходит, банально даже не отображаются ошибки если что-то введено не корректно, после нажатия на кнопку данные просто исчезают и никакого входа, перенаправления (на существующею и уже зарегистрированную страницу в urls нету) . Как тогда поступать? я уже не знаю что именно мне нужно сделать?

views.py
def login_user(request):
    if request.method == 'POST':
        form = UserLoginForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            user = authenticate(username=username, password=password)
            if user is not None:
                login(request, user)
                return HttpResponseRedirect(reverse('myblog:index'))
    else:
        form = UserLoginForm()
    return render(request, 'users/login.html', {'form': form})


forms.py
class UserLoginForm(AuthenticationForm):
    username = forms.CharField(
        widget=forms.TextInput(attrs={
            'class': 'login__fields__username', 'placeholder': 'Username'
        }))
    password = forms.CharField(
        widget=forms.PasswordInput(attrs={
            'class': 'login__fields__password', 'placeholder': 'Password'
        }))

    class Meta:
        model = User
        fields = ('username', 'password', )


login.html:
<form action="" method="post">
            {% csrf_token %}
            {% if form.errors %}
                <ul>
                    {% for field in form %}
                        {% if field.errors %}
                            <li>{{ field.label }}: {{ field.errors|join:", " }}</li>
                        {% endif %}
                    {% endfor %}
                </ul>
            {% endif %}
            <div class="login">
                <div class="login__title">Login for <br>this website</div>
                <div class="login__subtitle">If you already have an account, simply log in by entering your details.</div>
                <div class="login__fields">
                    <div class="login__fields__username">
                        {{ form.username }}
                    </div>
                    <div class="login__fields__password">
                        {{ form.password }}
                    </div>
                </div>
                <div class="login__buttons">
                    <button class="login__btn" type="submit">Login in account</button>
                    <p class="linktext">You don't have account? <a href="{% url 'users:register_user' %}" class="linktext">Register</a></p>
                </div>
            </div>
        </form>
  • Вопрос задан
  • 109 просмотров
Решения вопроса 1
@espacement
В логине я бы заменил это
username = request.POST['username']
            password = request.POST['password']
            user = auth.authenticate(username=username, password=password)
            if user is not None:
                 auth.login(request, user)
                 return HttpResponseRedirect(reverse('myblog:index'))

А с html, вот мой код, можешь его под свою задачу подстроить и вроде должно получится, хотя я думаю твой верен
<form action="{% url 'users:autho' %}" method="post" id="login-form">
            {% csrf_token %}

            {% if form.non_field_errors %}
                <p>{{ form.non_field_errors }}</p>
            {% endif %}

            {% for item in form %}
                <label for="{{ item.id_for_label }}">{{ item.label }}</label>
                {{ item }}
            {% endfor %}
            <button type="submit">Войти</button> 
        </form>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы