0

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

我试图在我的 base.html 中添加表单。还尝试使用这样的 middleware.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 %}

这给了我这个错误'WSGIRequest'对象没有属性'get'

4

2 回答 2

0

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

我的解决方法是:

菜单.html

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

urls.py 添加了这个:

url(r'^accounts/', 包括('django.contrib.auth.urls')),

于 2017-05-25T19:24:55.743 回答
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>
于 2017-05-25T19:53:40.977 回答