0

我正在使用django-registration. 让它工作后,我继续使用 Bootstrap 扩展视图和表单以进行字段自定义。

除了注销页面之外,我对所有内容都有效。在默认方法中,我只是从头开始构建表单,它工作正常。但是当尝试使用 Django 的表单时,它根本没有显示字段。登录和注销模板都使用这种基本形式:

<div class="auth-form">
    <form class="form-signin" method="post" action="/accounts/login/">
        {% csrf_token %}
        <h2 class="form-signin-heading">Please log in</h2>
            <div class="font-16px top-mar-1em">
                <label for="id_username"></label>
                {{ form.username }}
                <label for="id_password1"></label>
                {{ form.password }}
                <div class="form-group">
                    <div class="col-sm-10">
                        <div class="level-checkbox">
                            <label for="checkbox">
                                {{ form.remember_me }} Remember me
                            </label>
                        </div>
                    </div>
                </div>
                <button class="btn btn-primary" type="submit">Log in</button>
        </div>
    </form>
</div>

这适用于登录页面,但对于注销页面则不行(缺少字段)。就像此页面无法使用表单一样。我确定我错过了一些简单的东西,但我无法弄清楚。

我的urls.py部分如下所示:

url(r'^accounts/login/$','django.contrib.auth.views.login', {
    'template_name': 'registration/login.html',
    'authentication_form': UserAuthenticationForm,
}),

我尝试添加一个urls.py类似于登录部分的注销部分,但这没有奏效。我试过 using logout_then_login, using login.htmlas import template onlogout.html和其他杂项无济于事。

显然,没有与默认注销视图关联的表单,所以这可能是问题所在,但我不确定在注销视图中实现标准表单的最佳方法。

4

2 回答 2

1

您应该能够将以下内容添加到您的urls.py并且一切正常。

url(r'^accounts/logout/$','django.contrib.auth.views.logout_then_login')

确保您已LOGIN_URL定义您的settings.py. 然后,当用户单击注销链接时,他们将点击注销视图,该视图负责重定向到包含您的表单的登录视图。

于 2013-12-26T17:54:12.823 回答
0

感谢@tsurantino,我能够使用消息框架来完成这项工作。我总是喜欢使用我以前没有使用过的 Django 的一部分来实现一个新功能。添加到工具包,可以这么说。这是我所做的:

因为我已经有一个signal_connectors.py基于用户注册/激活发送电子邮件的文件,所以我刚刚添加到它:

@receiver(user_logged_out)
def user_logged_out_message(sender, request, **kwargs):
    messages.add_message(
        request,
        messages.INFO,
        'You\'ve been successfully logged out. You can log in again below.'
)

然后在我common的应用程序中__init__.py导入它:

from common.signal_connectors import user_logged_out_message

然后在我的login.html模板中:

{% if messages %}
    <div class="alert-success align-ctr font-16px top-mar-2em">
        {% for message in messages %}
            {{ message }}
        {% endfor %}
    </div>
{% endif %}

最后,在注销后重定向到登录页面(urls.py):

url(r'^accounts/logout/$','django.contrib.auth.views.logout_then_login'),

感谢大家的帮助和评论。

于 2013-12-26T19:04:45.833 回答