所有视图中的django调用函数(登录)

时间:2015-02-09 08:27:16

标签: django

我想在所有视图中调用/inscription/views.py中的函数(因为它用于登录)。我需要在参数中传递用户名和密码以记录用户。

def login_user(request):
    if request.method =='POST':
        auth_form=AuthenticationForm(data=request.POST)
        if auth_form.is_valid():
           username = request.POST.get('username')
           password = request.POST.get('password')
           uti = authenticate(username = username,password = password)

           if uti:
            if uti.is_active:
                login(request, uti)
                return HttpResponseRedirect('/accueil')
            else:
                return HttpResponse("Your account is disabled.")
        else:
            return HttpResponse("Invalid login details supplied.")

    else:
        auth_form=AuthenticationForm()
        return render_to_response('authentication.html',
                              {'auth_form': auth_form}, RequestContext(request))

def logout_user(request):
    logout(request)

在我的base.html中,我想添加类似的内容:

<label class="form_login">pseudo : </label>
            <input type="text" name="username" id="id_username" class="login_input">

          <label class="form_login">mot de passe : </label>
            <input type="text" name="password" id="id_password" class="login_input">

          <input value="login" type="submit"/>
          <button><a href="/inscription/logout">logout</a></button>

2 个答案:

答案 0 :(得分:2)

如果我理解你的问题,你需要的是强制用户登录,如果他还没有登录,然后才能访问你的观点。为此,您只需使用login_required decorator

装饰您的观看次数即可。
from django.contrib.auth.decorators import login_required

@login_required
def my_view(request):
    ...

来自文档:

login_required() does the following:

 - If the user isn’t logged in, redirect to settings.LOGIN_URL, passing
   the current absolute path in the query string. Example:
   /accounts/login/?next=/polls/3/.

 - If the user is logged in, execute the view normally. The view code is
   free to assume the user is logged in.

<强>更新

根据您的评论,现在我了解您需要在所有页面中为用户登录创建表单,或者如果他已经登录则需要注销链接。首先,您需要为这些视图定义URL:

url(r'^login/$', 'inscription.views.login', name='auth_login'),
url(r'^logout/$', 'inscription.views.logout', name='auth_logout'),

在你的base.html:

{% if user.is_authenticated %}

<a href="{% url 'auth_logout' %}">Logout</a>

{% else %}
    <form method="post" action="{% url 'auth_login' %}">
        {% csrf_token %}
        <input type="text" name="username" id="id_username">
        <input type="text" name="password" id="id_password">
        <input type="submit" value="Log in" />
    </form>
{% endif %}

作为旁注,我强烈建议您使用其中一个可重复使用的应用进行身份验证和注册。除非你有奇怪的要求。

http://django-registration-redux.readthedocs.org/en/latest/ http://django-allauth.readthedocs.org/en/latest/

答案 1 :(得分:0)

您面临的问题是,您希望登录和注销也能从其他页面开始工作,因此,您不需要使用任何额外的功能。您需要做的就是,只需将base.html扩展到所有其他html页面。然后你肯定能够从所有页面登录和注销。

假设您在base.html中有登录/注销

<label class="form_login">pseudo :</label>
<input type="text" name="username" id="id_username" class="login_input">

<label class="form_login">mot de passe : </label>
<input type="text" name="password" id="id_password" class="login_input">

<input value="login" type="submit"/>
<button><a href="/inscription/logout">logout</a></button>

现在制作一些其他html说test.html

一开始就写了

{% extends 'base.html' %}

后跟HTML标记。

别忘了使用

{% block content %} {% endblock %} **template tags**

在基本以及其他HTML页面中。

在其他页面中,您尝试在模板标签中编写完整的代码。

查询https://docs.djangoproject.com/en/1.7/topics/templates/

也尝试使用装饰器的概念。