Django登录无效,如何解决?

时间:2019-02-05 21:27:59

标签: python django authentication login

我的项目中有登录表单。当我输入正确的用户名和密码时,它不会发布我的请求,并且我的浏览器区域如下所示: http://127.0.0.1:8000/user/login/?csrfmiddlewaretoken=EukLSCRC5B25iBrDXqVsQ7iyF2FUUhgrldri2MIrb3IM8f4dMngo66tciJkmfNYt&username=admin&password=123 (因为我的用户名:admin,密码:123)

我尝试将“表单方法” POST更改为以html登录模板发布,但不起作用。而且我删除了csrf_token,但实际上再也无法使用了。

forms.py

class LoginForm(forms.Form):
    username = forms.CharField(label = "Username")
    password = forms.CharField(label = "Password", widget=forms.PasswordInput)

views.py

def loginUser(request):
    form = LoginForm(request.POST or None)
    context = {

        "form": form

    }

    if form.is_valid():
        username = form.cleaned_data.get("username")
        password = form.cleaned_data.get("password")

        user = authenticate(username = username, password=password)

        if user is None:
            messages.info(request,"Username or Password is incorrect! Try again.")
            return render(request,"login.html", context)

        messages.success(request,"Login successful! Welcome honey.")
        login(request,user)
        return redirect("index")

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

urls.py

app_name = "user"

urlpatterns = [
    path('register/',views.register, name ="register"),
    path('login/',views.loginUser, name ="login"),
    path('logout/',views.logoutUser, name ="logout"),

]

login.html

{% extends "layout.html" %}

{% block body %}

{% load crispy_forms_tags %}



<div class="row">
    <div class="col-md-6 offset-md-3">

        <h3>Login</h3>
        <hr>
        <form method = "post">
            {% csrf_token %}
            {{form|crispy}}

            <button type = "submit" class = "btn btn-danger">Sign In</button>

            </form>


    </div>
  </div>

{% endblock  %}

浏览器区域显示:http://127.0.0.1:8000/user/login/?csrfmiddlewaretoken=EukLSCRC5B25iBrDXqVsQ7iyF2FUUhgrldri2MIrb3IM8f4dMngo66tciJkmfNYt&username=admin&password=123 (因为我的用户名:admin,密码:123)

2 个答案:

答案 0 :(得分:0)

可以在表单中添加动作吗?您的表格没有动作。

<form method = "post" action="{% url 'user:login' %}>

答案 1 :(得分:-1)

不要使用form.cleaned_data, 使用:

request.POST.get("username","")

密码相同!