【问题标题】:Django redirect not working when I submit my form提交表单时 Django 重定向不起作用
【发布时间】:2019-04-20 19:23:09
【问题描述】:

提交表单时,我的登录页面重定向无法正常工作。

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

知道发生了什么吗?

【问题讨论】:

  • 您可以使用“登录”显示您请求的视图吗?

标签: django


【解决方案1】:

您尚未显示您的模板,但您的 form 标记中似乎有 action="POST" 而不是 method="POST"

【讨论】:

    【解决方案2】:

    请确保您的 template.html 看起来像这样:

     <form method="post">
     {% csrf_token %}
     {{ form }}
     </form>
    

    【讨论】:

      【解决方案3】:
      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,
              })
      

      【讨论】:

        猜你喜欢
        • 2018-06-11
        • 2020-07-14
        • 1970-01-01
        • 2017-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多