Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-使用通用登录视图不起作用_Python_Django_Login_Django Generic Views - Fatal编程技术网

Python Django-使用通用登录视图不起作用

Python Django-使用通用登录视图不起作用,python,django,login,django-generic-views,Python,Django,Login,Django Generic Views,编辑:当我输入正确的用户名和密码时,视图现在会让我登录,但当我输入错误的用户名和密码时,视图不会返回任何错误。 我使用的是Django提供的通用登录视图。这是我的login.html模板: <body> <h1>User Login</h1> {% if form.has_errors %} <p>Your username and password did not match. Please t

编辑:当我输入正确的用户名和密码时,视图现在会让我登录,但当我输入错误的用户名和密码时,视图不会返回任何错误。 我使用的是Django提供的通用登录视图。这是我的login.html模板:

<body>
    <h1>User Login</h1>

    {% if form.has_errors %}
        <p>Your username and password did not match. 
        Please try again.</p>
    {% else %}
        <form method="post" action=" . ">{% csrf_token %}
            <p><label for="id_username">Username:</label>
            {{ form.username }}</p>

            <p><label for="id_password">Password:</label>
            {{ form.password }}</p>

            <input type="hidden" name="next" value="/" />
            <input type="submit" value="login" />
        </form>
    {% endif %}
</body>
即使我故意提交了不正确的用户名和密码。单击“提交”后,它会一直将我返回到同一页面。另外,根据我读的HTML书籍,它说表单中的“action”属性是服务器上检索信息的页面的URL。这就是它不起作用的原因吗?因为我的

action=" . "
?

编辑:该视图是通用登录视图:

@sensitive_post_parameters()
@csrf_protect
@never_cache
def login(request, template_name='registration/login.html',
          redirect_field_name=REDIRECT_FIELD_NAME,
          authentication_form=AuthenticationForm,
          current_app=None, extra_context=None):
    """
    Displays the login form and handles the login action.
    """
    redirect_to = request.REQUEST.get(redirect_field_name, '')
    if request.method == "POST":
        form = authentication_form(data=request.POST)
        if form.is_valid():

            # Ensure the user-originating redirection url is safe.
            if not is_safe_url(url=redirect_to, host=request.get_host()):
                redirect_to = resolve_url(settings.LOGIN_REDIRECT_URL)

            # Okay, security check complete. Log the user in.
            auth_login(request, form.get_user())

            if request.session.test_cookie_worked():
                request.session.delete_test_cookie()

            return HttpResponseRedirect(redirect_to)
    else:
        form = authentication_form(request)

    request.session.set_test_cookie()

    current_site = get_current_site(request)

    context = {
        'form': form,
        redirect_field_name: redirect_to,
        'site': current_site,
        'site_name': current_site.name,
    }
    if extra_context is not None:
       context.update(extra_context)
    return TemplateResponse(request, template_name, context,
                            current_app=current_app)
我的url.py只是

url(r'^$', main_page),
url(r'^user/(\w+)/$', user_page), 
url(r'^login/$', login),
试试这个

Login.Html

    <form action ="." method = POST>
        {% csrf_token %}    
        {{ form.as_p }}

        <input type = "submit" value = "login" class="btn">

    </form>
设置.py

from django.contrib.auth.views import login, logout
from django.conf.urls import *

urlpatterns = patterns('',
    url(r'login/',login,kwargs = {'template_name' : 'templates/auth/login.html'},
    url(r'logout', logout,kwargs = {'template_name' : 'templates/auth/logout.html'}),
)
LOGIN_REDIRECT_URL  = '/dashboard'
LOGIN_URL           = '/login/'

啊,在这里找到了答案:

被替换为

form.errors

action
确实应该指向您在
URL.py
中定义的URL以接收此表单。要获得更完整的答案,我们需要查看视图代码。查看@YerayDiazDiaz hm好的,我编辑了我的帖子,并给出了url.py和登录视图。那么,我是否应该尝试将我的操作更改为action='127.0.0.1/login/'?@user2719875-没有必要更改操作。您需要在settings.py文件中设置
LOGIN\u REDIRECT\u URL
字段。@python coder我创建了LOGIN\u REDIRECT\u URL='',因为我想将它重定向到主页面。即使我故意输入了错误的用户名和密码,它也不会返回任何错误消息,当我输入了正确的用户名和密码时,它什么也不做。在这两种情况下,它都会返回到登录页面。知道为什么吗?嗯,它仍然给出相同的“错误”。它并不是真的返回错误,它只是不断地将我返回到127.0.0.1/login,不管我做什么。你创建了任何用户吗?当您尝试登录到django管理员时会发生什么情况(如果您启用了它)?已经创建了一个用户,是的,我启用了管理员界面。有1个用户。但即使没有,它仍然应该说“您的用户名和密码不匹配。请重试。”如果我输入了错误的用户名和密码,对吗?顺便说一句,我只是使用通用登录视图,但现在我正在阅读它,它在哪一行中接受用户名和密码,并验证用户名和密码与数据库中的用户名和密码匹配?您可以登录到django admin吗?是的,我可以登录到django admin。顺便说一句,我只是使用通用登录视图,但现在我正在阅读它,它在哪一行接受用户名和密码,并验证用户名和密码与数据库中的用户名和密码匹配?因为当我进入管理界面查看现有用户时,会看到用户的用户名和电子邮件地址,用户名的名字和姓氏为空,但没有密码字段。
form.has_errors 
form.errors