Django перенаправление не работает, когда я отправляю свою форму - PullRequest
0 голосов
/ 20 апреля 2019

Когда я отправляю форму, перенаправление на мою страницу входа в систему работает некорректно.

def login_page(request):

    form = LoginForm(request.POST or None)
    context = {
        'form': form,
    }
    print(request.user.is_authenticated)
    if form.is_valid():

        username = form.cleaned_data.get("username")
        password = form.cleaned_data.get("password")
        user = authenticate(request, username=username, password=password)
        if user is not None:
            print(request.user.is_authenticated)
            login(request, user)

            # Redirect to a success page.
            return redirect("login")
        else:
            # Return an 'invalid login' error message.
            print("Error")

    return render(request, "content/login.html", context)

Я ожидаю, что оно перенаправит на ту же страницу и выведет вывод, который позволит мне узнать, работает ли аутентификация.Но это то, что на самом деле происходит ..

Page not found(404)
Request Method: GET
Request URL:http://127.0.0.1:8000/login/POST?username=stone&password=pass

Есть идеи о том, что происходит?

Ответы [ 3 ]

3 голосов
/ 20 апреля 2019

Вы не показали свой шаблон, но похоже, что в вашем теге form action="POST" вместо method="POST".

0 голосов
/ 20 апреля 2019
def login_user(request):
    if request.user.is_authenticated():
        return redirect(reverse('homepage'))

    form = LoginForm(request.POST or None)
    if request.method == "POST":
      if form.is_valid():
          user = authenticate(username=form.cleaned_data['email'], password=form.cleaned_data['password'])

          if user is not None:
              login(request, user)
              return redirect(reverse('homepage'))
          else:
              error_message = "* Password you entered is incorrect."
              return render(request, "account/login.html",{
                  "form": form,
                  "error_message": error_message,
              })
    else:
        return render(request, "account/login.html", {
            "form": form,
        })
0 голосов
/ 20 апреля 2019

Убедитесь, что ваш template.html выглядит так:

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