在引导弹出Django的登录表单 [英] Django login form in bootstrap popup

查看:961
本文介绍了在引导弹出Django的登录表单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用Django 1.5 + Twitter的引导。

有一个弹出下拉(引导)登录表单在每一页上。 Authentificating右凭据做工不错。 现在,我的问题 - 需要添加错误信息在同一页上的错误的凭据,没有刷新页面。它可以是一个模式窗口,或更好,如果它是在相同的弹出窗口只是一个文本。不知道该怎么做,没有重定向/重装。

有些code:

views.py:

 高清LoginRequest(要求):
    如果request.user.is_authenticated():
        返回的Htt presponseRedirect(request.META.get('HTTP_REFERER','/'))
    如果request.method =='POST':
        表= LoginForm的(request.POST)
        如果form.is_valid():
            电子邮件= form.cleaned_data [电子邮件]
            密码= form.cleaned_data ['密码']
            用户=验证(电子邮件=电子邮件,密码=密码)
            如果用户不是无:
                登录(请求用户)
                返回的Htt presponseRedirect(request.META.get('HTTP_REFERER','/'))
            其他:
                返回render_to_response('/',{形式:形式},context_instance = RequestContext的(要求))
        其他:
            返回render_to_response('/',{形式:形式},context_instance = RequestContext的(要求))
    其他:
        表= LoginForm的()
        返回render_to_response('/',{形式:形式},context_instance = RequestContext的(要求))
 

urls.py:

  URL模式=模式(
    accounts.views,
    URL(R'^注册/ $','AccountRegistration),
    URL(R'^登录/ $','LoginRequest),
    URL(R'^注销/ $','LogoutRequest),
)
 

forms.py:

 类LoginForm的(forms.Form):
        电子邮件= forms.CharField(标签=(u'Email'),MAX_LENGTH = 30)
        密码= forms.CharField(标签=(u'Pass'),部件= forms.PasswordInput(render_value = FALSE),MAX_LENGTH = 30)
 

模板我的弹出窗口的

片段:

 < UL类=导航右拉式>
    {%,如果user.is_authenticated%}
    <李>< A HREF =/型材/> {{用户}}< / A>< /李>
    <李>
        <表格样式=保证金:0;行动='/注销/'方法=POST>
        {%csrf_token%}
            <输入类型=提交值=注销级=BTN BTN-链接风格=颜色:#777777; />< /李>
            <输入类型=隐藏名称=下一个值={{}的current_path}/>
        < /形式GT;
    < /李>
    {% 其他 %}
    <李类=下拉列表中>
        <一类=下拉菜单,切换的href =#数据切换=下拉列表中>登录<强烈的阶级=插入符号>< / STRONG>< / A>
        < D​​IV CLASS =下拉菜单的风格=填充:15px的;填充底:0px;>
            <形式的行动='/登录/'方法=POST>
            {%csrf_token%}
                {%,如果form.errors%}
                    {{form.errors}}
                {%ENDIF%}
                <标签=id_email>登录:LT; /标签>
                <输入类型=文本名称=电子邮件ID =id_email>
                < BR />
                <标签=id_password>通:LT; /标签>
                <输入类型=密码NAME =密码ID =id_password>
                < BR />
                <输入类=BTN BTN-主型=提交值=登陆/>
                <输入类型=隐藏名称=下一个值={{}的current_path}/>
            < /形式GT;
        < / DIV>
    < /李>
< / UL>
 

解决方案

如果你不想在页面重新加载,你就必须用提交的 AJAX ,做一些它的回报方式。

Using django 1.5 + twitter bootstrap.

Have a popup dropdown (bootstrap) login form on every page. Authentificating with right credentials working good. Now, my problem - need to add error message on wrong credentials on the same page, without page reloading. It can be a modal window, or better if it would be just a text in the same popup window. Dunno how to do that, without redirect/reload.

Some code:

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)

Fragment of template with my popup:

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

解决方案

If you don't want a page to reload you'll have to submit with ajax and do something on it's return method.

这篇关于在引导弹出Django的登录表单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆