2015-02-09 22 views
1

Я хотел бы вызвать функцию, которая находится в /inscription/views.py, так как все представления (потому что это для входа). И мне нужно передать имя пользователя и пароль в параметрах для входа пользователя в систему.Функция вызова django во всех представлениях (логин)

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

Если я правильно понимаю ваш вопрос, что вам нужно, чтобы заставить пользователя войти в систему, если он еще не прежде чем он сможет получить доступ к вашим представлениям. Чтобы сделать это, все, что вам нужно сделать, это, чтобы украсить ваши взгляды с login_requireddecorator

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. 

Update:

Ваш комментарий, теперь я понимаю, что вам нужно сделать форму на всех страницах для входа в систему пользователя или ссылку выхода, если он уже вошел в систему. Сначала вам нужно определить свои 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/

+0

Нет, это не мой вопрос, жаль, что я попробую еще раз ^^ функции входа и выхода из системы находятся в представлении/надписи. Но кнопка «login» и «logout» и запись «имя пользователя» и «пароль» находятся в base.html не в файле inscription.html, потому что пользователи могут подключаться ко всем представлениям (в верхней части веб-сайта, например весь веб-сайт). Вот почему я положил его в base.html. Итак, как я могу вызвать функцию входа в систему и выхода из системы во всех представлениях (для входа требуется также 2 параметра, имя пользователя и пароль, поэтому мне нужно отправить эти два параметра). Большое спасибо –

+0

@clementl см. Мое обновление – almalki

+0

Спасибо, что я был моим вопросом, я буду проверять его как можно скорее Thank's –

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-страницы.

В других страницах u попробуйте написать полный код в тегах шаблонов.

По запросу https://docs.djangoproject.com/en/1.7/topics/templates/

попробовать также с использованием концепции декоратора.

Смежные вопросы