如何在djangocms的每个页面中使用django-userena登录和注销表单?

时间:2016-06-17 22:40:25

标签: django django-cms django-userena

我有一个运行djangocms的网站,我需要django-userena的登录和注销功能,我很容易使用它,因为每个用户也会有个人资料页面。每个页面中菜单的设计都表明简单的登录表单必须位于菜单的右上角。我已经这样做了,但我需要django-userena登录才能使用它。我该怎么办?

我尝试在base.html中添加表单。还尝试使用像这样的中间件.py

    class LoginFormMiddleware(object):
        def process_request(self, request):
        from userena.forms import AuthenticationForm
        if request.method == 'POST' and request.POST.has_key('base-account') and request.POST['base-account'] == 'Login':
        form = AuthenticationForm(data=request.POST, prefix="login")
        if form.is_valid():
            from django.contrib.auth import login
            login(request, form.get_user())
        request.method = 'GET'
    else:
        form = AuthenticationForm(request, prefix="login")
    request.login_form = form

class LogoutFormMiddleware(object):
def process_request(self, request):
    if request.method == 'POST' and request.POST.has_key('base-account') and request.POST['base-account'] == 'Logout':
        from userena.views import signout
        signout(request)
        request.method = 'GET'

base.html文件

<form class="navbar-form navbar-right login-strip" action="" method="post">
                        {% csrf_token %}
                        <p id="login">
                            {{ request.login_form.non_field_errors }}
                            {% for field in request.login_form %}
                                {{ field.errors }}
                                {{ field.label_tag}}: {{ field }}
                            {% endfor %}
                            <input type="submit" name="base-account" value="Login" />
                        </p>
                    </form>
                    {% else %}
                    <form class="navbar-form navbar-right login-strip" action="" method="post">
                        {% csrf_token %}
                        <p id="logout">Logged in as <b>{{ request.user.username }}</b>.
                            <input type="submit" name="base-account" value="Logout" />
                        </p>
                    </form>
                    {% endif %}

这给了我这个错误 &#39; WSGIRequest&#39;对象没有属性&#39; get&#39;

2 个答案:

答案 0 :(得分:0)

我已经尝试了很多大腿。 现在我没有使用任何一方django-authentictication我只是在我的menu.html中放了一些代码,这样我就可以根据需要登录并注销。 我的问题是普通帐户无法注销。

我的工作是:

menu.html

&#13;
&#13;
{% load i18n menu_tags cache %}

{% for child in children %}
	<li class="{% if child.ancestor %}ancestor{% endif %}
		{% if child.selected %} active{% endif %}
		{% if child.children %} dropdown{% endif %}">
		{% if child.children %}
			<a class="dropdown-toggle" data-toggle="dropdown" href="#">
				{{ child.get_menu_title }} <span class="caret"></span>
			</a>
			<ul class="dropdown-menu">
				{% show_menu from_level to_level extra_inactive extra_active template "" "" child %}
			</ul>
		{% else %}
			<a href="{{ child.get_absolute_url }}"><span>{{ child.get_menu_title }}</span></a>
		{% endif %}
		</li>
		{% if class and forloop.last and not forloop.parentloop %}{% endif %}
{% endfor %}
		<li class="User" style="position: absolute; right: 0;">
			<a >
				{% if user.is_authenticated %}
                    <form method="post" action= "accounts/logout/?next={{ request.path }}">
						{% csrf_token %}
						<button type="submit" class="cms-btn cms-btn-action"><span class="glyphicon glyphicon-user"></span> {{ request.user.username }}</button>
					</form>
				{% else %}
                    <form action="{% url 'pages-root' %}{% if request.path != logout_url %}?next={{ request.path }}&amp;{{ cms_edit_on }}&amp;cms-toolbar-login=1{% endif %}"
                        class="cms-toolbar-item cms-form-login" method="post">
                        {% csrf_token %}
                        <label{% if request.toolbar.login_form.username.errors or request.toolbar.login_form.non_field_errors or cms_toolbar_login_error %} class="cms-error"{% endif %}>
                            <span>{% trans request.toolbar.login_form.username.label %}</span>
                            {{ request.toolbar.login_form.username }}
                        </label>
                        <label{% if request.toolbar.login_form.password.errors or request.toolbar.login_form.non_field_errors or cms_toolbar_login_error %} class="cms-error"{% endif %}>
                            <span>{% trans request.toolbar.login_form.password.label %}</span>
                            {{ request.toolbar.login_form.password }}
                        </label>
                        <label>
                            <input class="cms-btn cms-btn-action" type="submit" value="{% trans 'Login' %}">
                        </label>
                    </form>
				{% endif %}
			</a>
		</li>
&#13;
&#13;
&#13;

urls.py补充说:

url(r&#39; ^ accounts /&#39;,include(&#39; django.contrib.auth.urls&#39;)),

答案 1 :(得分:0)

我最终得到了这个代码,更多的移动朋友。

<li class="User" style="position: absolute; right: 0;">
        <a >
            {% if user.is_authenticated %}
                <form method="post" action= "accounts/logout/?next={{ request.path }}">
                    {% csrf_token %}
                    <p id="logout"><span class="glyphicon glyphicon-user"></span> <b>{{ request.user.username }}</b>
                    <button type="submit" class="cms-btn cms-btn-action"><span class="glyphicon glyphicon-off"></span> {% trans "Logout" %}</button>
                </form>
            {% else %}
                <form method="post" action="{{request.path}}?edit">
                    {% csrf_token %}
                    <button type="submit" class="btn btn-default"><span class="glyphicon glyphicon-user"></span> {% trans "Login" %}</button>
                </form>
            {% endif %}
        </a>
    </li>
相关问题