Представление ats.views.index не возвращало объект HttpResponse. Вместо этого он вернулся - PullRequest
2 голосов
/ 28 января 2020

Представление ats.views.index не возвращало объект HttpResponse. Вместо этого он вернул None.

Я пытаюсь внедрить систему аутентификации, если я правильно ввожу пароль, я не сталкиваюсь с какими-либо проблемами, но при неправильном вводе я получаю эту ошибку. Кто-нибудь знает, как я мог решить это?

Это мой взгляд

def index(request):
    if request.method == 'POST':
        form = AuthenticationForm(data=request.POST)
        if form.is_valid():
            user = form.get_user()
            login(request, user)
            return render(request, "homepage.html", context_instance=RequestContext(request))

    else:
        form = AuthenticationForm()
        return render(request, "index.html", {'form': form})

Это мой html

{% block content %}
    <form class="box" method = "post">
        {% csrf_token %}
        <h1>Ats</h1>
        {{ form }}
      <input type="submit" name="" value="Login">

    </form>
{% endblock %}

Ответы [ 4 ]

3 голосов
/ 28 января 2020

Перестановка кода должна работать

def index(request):
    form = AuthenticationForm()
    if request.method == 'POST':
        form = AuthenticationForm(data=request.POST)
        if form.is_valid():
            user = form.get_user()
            login(request, user)
            return render(request, "homepage.html", context_instance=RequestContext(request))

    return render(request, "index.html", {'form': form})
3 голосов
/ 28 января 2020

Запрос может быть запросом POST, но там, где form.is_valid() не выполняется. В этом случае, ваше представление вернется None.

Вы должны "удалить отступ" для части return render(..):

from django.shortcuts import redirect

def index(request):
    if request.method == 'POST':
        form = AuthenticationForm(data=request.POST)
        if form.is_valid():
            user = form.get_user()
            login(request, user)
            return <b>redirect(<i>'some-view-name'</i>)</b>
    else:
        form = AuthenticationForm()
    <b>return</b> render(request, 'index.html', {'form': form})

Обратите внимание, что здесь ваше представление не не выполняет аутентификацию. Сначала вы должны проверить, совпадает ли пароль (или другой токен). Для получения дополнительной информации см. Документацию по authenticate(..) [Django -doc] .

В случае успешного запроса POST необходимо выполнить перенаправление на реализовать шаблон Post / Redirect / Get [wiki] .

1 голос
/ 28 января 2020

Вы получаете эту проблему, потому что вы не написали объект HttpResponse, если форма недействительна.

Чтобы преодолеть это, по вашему мнению, напишите ответ HTTP, если форма недействительна.

def index(request):
    if request.method == 'POST':
        form = AuthenticationForm(data=request.POST)
        if form.is_valid():
            user = form.get_user()
            login(request, user)
            return render(request, "homepage.html", context_instance=RequestContext(request))
        else:
            return render(request, "index.html", {'form': form, 'errors': form.errors})

    else:
        form = AuthenticationForm()
        return render(request, "index.html", {'form': form})

в индексе. html

{% block content %}
    {% if errors %}
        {{ errors }}
    {% endif %}
    <form class="box" method = "post">
        {% csrf_token %}
        <h1>Ats</h1>
        {{ form }}
      <input type="submit" name="" value="Login">

    </form>
{% endblock %}

или вы можете просто обработать условия и вернуть запрос по умолчанию, если запрос не является почтовым запросом.

def index(request):
    form = AuthenticationForm()
    if request.method == 'POST':
        form = AuthenticationForm(data=request.POST)
        if form.is_valid():
            user = form.get_user()
            login(request, user)
            return render(request, "homepage.html", context_instance=RequestContext(request))

    return render(request, "index.html", {'form': form})
1 голос
/ 28 января 2020

Вам необходимо определить условие else, если форма недействительна.

def index(request):
    if request.method == 'POST':
        form = AuthenticationForm(data=request.POST)
        if form.is_valid():
            user = form.get_user()
            login(request, user)
            return render(request, "homepage.html", context_instance=RequestContext(request))
        else:
            return render(request, "index.html", {'form': form, 'errors': form.errors})

    else:
        form = AuthenticationForm()
        return render(request, "index.html", {'form': form})

В вашем шаблоне вы можете отобразить ошибки формы, обратившись к этой переменной контекста {{ errors }}.

{% block content %}
    {% if errors %}
        {{ errors }}
    {% endif %}
    <form class="box" method = "post">
        {% csrf_token %}
        <h1>Ats</h1>
        {{ form }}
      <input type="submit" name="" value="Login">

    </form>
{% endblock %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...