简体   繁体   中英

Not able to post form data to action url

I have a login form. After pressing the login button the the post data is sent to the view login_auth that authenticates the user data and redirects accordingly. However,after pressing the login button, I am not being redirected to the appropriate page.

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)
]

login.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>

Your login url pattern is missing a trailing $ . It should be:

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

Without the dollar, the /login/auth is matched by r'^login/ , so the request is handled by your login view.

It's a bit unusual to process the form on a different url. Django comes with authentication views , including a login view. I would recommend using this rather than writing your own.

Use name for url

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)
]

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM