【问题标题】:Not able to post form data to action url无法将表单数据发布到操作 url
【发布时间】:2016-10-01 21:41:22
【问题描述】:

我有一个登录表单。按下登录按钮后,post 数据被发送到视图 login_auth,该视图验证用户数据并相应地重定向。但是,在按下登录按钮后,我并没有被重定向到相应的页面。

views.py

def login_successful(request):
    return render(request,"login_successful.html")

def login_invalid(request):
    return render(request,"login_invalid.html")


def login(request):
    return render(request,'login.html',c)

def loginauth(request):
    username=request.POST.get("username",'')
    password=request.POST.get("password",'')
    user=auth.authenticate(username=username,password=password)
    if user is not none:
        user.login(request.user)
        return redirect(login_successful)
    else:
        return redirect(login_invalid)

urls.py

urlpatterns = [
url(r'^registration/',views.registration),
url(r'^registration_successful/',views.registration_successful),
url(r'^home/',views.home),
url(r'^login/',views.login),

url(r'^login_successful/',views.login_successful),
url(r'^login_invalid/',views.login_invalid),
url(r'^login/auth',views.loginauth)
]

登录.html

<html>
<form action="/login/auth" method="POST">{% csrf_token %}

Username :<input type="textbox" name="username" >
Password :<input type="password" name="password">
<input type="submit" value="Login">

</form>
</html>

【问题讨论】:

    标签: html django python-2.7


    【解决方案1】:

    使用名称作为网址

    views.py

    def login_successful(request):
        return render(request,"login_successful.html")
    
    def login_invalid(request):
        return render(request,"login_invalid.html")
    
    
    def login(request):
        return render(request,'login.html',c)
    
    def loginauth(request):
        username=request.POST.get("username",'')
        password=request.POST.get("password",'')
        user=auth.authenticate(username=username,password=password)
        if user is not none:
            user.login(request.user)
            return redirect('login_successful')
        else:
            return redirect('login_invalid')
    

    urls.py

    urlpatterns = [
    url(r'^registration/',views.registration),
    url(r'^registration_successful/',views.registration_successful),
    url(r'^home/',views.home),
    url(r'^login/$',views.login),
    
    url(r'^login_successful/',views.login_successful, name='login_successful'),
    url(r'^login_invalid/',views.login_invalid, name='login_invalid'),
    url(r'^login/auth',views.loginauth)
    ]
    

    【讨论】:

      【解决方案2】:

      您的登录网址格式缺少结尾的 $。应该是:

      url(r'^login/$', views.login),
      

      没有美元,/login/authr'^login/ 匹配,因此请求由您的登录视图处理。

      在不同的 url 上处理表单有点不寻常。 Django 带有authentication views,包括一个登录视图。我建议使用它而不是自己编写。

      【讨论】:

      • 谢谢,它有效,但请告诉我为什么在不同的 url 上处理是不寻常的。是否存在安全风险?
      • 将登录表单发布到不同的 url 没有特定的安全风险。通常,您会使用django forms。您在模板中显示表单,并在视图中使用它来处理数据,因此使用相同的视图是有意义的。
      猜你喜欢
      • 1970-01-01
      • 2019-06-20
      • 2018-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-20
      • 2017-11-10
      • 2013-03-16
      相关资源
      最近更新 更多