引导弹出窗口中的 Django 登录表单

Posted

技术标签:

【中文标题】引导弹出窗口中的 Django 登录表单【英文标题】:Django login form in bootstrap popup 【发布时间】:2013-03-15 23:57:26 【问题描述】:

使用 django 1.5 + twitter 引导。

在每个页面上都有一个弹出式下拉(引导)登录表单。 使用正确的凭据进行身份验证工作良好。 现在,我的问题 - 需要在同一页面上的错误凭据上添加错误消息,而无需重新加载页面。它可以是一个模态窗口,或者如果它只是同一个弹出窗口中的一个文本则更好。不知道怎么做,没有重定向/重新加载。

一些代码:

views.py:

def LoginRequest(request):
    if request.user.is_authenticated():
        return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
    if request.method == 'POST':
        form = LoginForm(request.POST)
        if form.is_valid():
            email = form.cleaned_data['email']
            password = form.cleaned_data['password']
            user = authenticate(email=email, password=password)
            if user is not None:
                login(request, user)
                return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
            else:
                return render_to_response('/', 'form': form, context_instance=RequestContext(request))
        else:
            return render_to_response('/', 'form': form, context_instance=RequestContext(request))
    else:
        form = LoginForm()
        return render_to_response('/', 'form': form, context_instance=RequestContext(request))

urls.py:

urlpatterns = patterns(
    'accounts.views',
    url(r'^signup/$', 'AccountRegistration'),
    url(r'^login/$', 'LoginRequest'),
    url(r'^logout/$', 'LogoutRequest'),
)

forms.py:

class LoginForm(forms.Form):
        email = forms.CharField(label=(u'Email'), max_length=30)
        password = forms.CharField(label=(u'Pass'), widget=forms.PasswordInput(render_value=False), max_length=30)

带有我的弹出窗口的模板片段:

<ul class="nav pull-right">
    % if user.is_authenticated %
    <li><a href="/profile/"> user </a></li>
    <li>
        <form style="margin:0;" action='/logout/' method="POST">
        % csrf_token %
            <input type="submit" value="Logout" class="btn btn-link" style="color:#777777;" /></li>
            <input type="hidden" name="next" value=" current_path " />
        </form>
    </li>
    % else %
    <li class="dropdown">
        <a class="dropdown-toggle" href="#" data-toggle="dropdown">Login <strong class="caret"></strong></a>
        <div class="dropdown-menu" style="padding: 15px; padding-bottom: 0px;">
            <form action='/login/' method="POST">
            % csrf_token %
                % if form.errors %
                     form.errors
                % endif %
                <label for="id_email">Login:</label>
                <input type="text" name="email" id="id_email">
                <br />
                <label for="id_password">Pass:</label>
                <input type="password" name="password" id="id_password">
                <br />
                <input class="btn btn-primary" type="submit" value="Login" />
                <input type="hidden" name="next" value=" current_path " />
            </form>
        </div>
    </li>
</ul>

【问题讨论】:

【参考方案1】:

如果您不想重新加载页面,则必须使用ajax 提交并对其返回方法执行一些操作。

【讨论】:

以上是关于引导弹出窗口中的 Django 登录表单的主要内容,如果未能解决你的问题,请参考以下文章

在引导弹出窗口中包含表单?

使用 ajax 和 django 引导弹出窗口和加载内容

引导弹出窗口未显示在所有元素之上

在表格中悬停几次后,引导弹出窗口停止

无法在外部单击时关闭带有动态内容的引导弹出窗口 - jquery

引导弹出窗口,关闭按钮