2014-12-04 2 views
1
@csrf_protect 
def loginn(request): 
    c = {} 
    c.update(csrf(request)) 
    return render_to_response("login/login.html",c) 

@csrf_protect 
def auth_view(request): 
    username = request.POST.get('username', '') 
    password = request.POST.get('password', '') 
    user = authenticate(username=username, password=password) 
    if user is not None: 
     if user.is_active: 
      login(request, user) 
      return render_to_response('login/loggedin.html',RequestContext(request)) 
    else: 
     return HttpResponseRedirect('/posts/invalid') 

def loggedin(request): 
    return render_to_response('login/loggedin.html', 
           {'full_name' : request.user.username}) 

def invalid_login(request): 
    return render_to_response('login/invalid_login.html') 

def logout(request): 
    logout(request) 
    return render_to_response('login/logout.html') 

Это то, что я имею в моих представлениях.py. Он работает, проверяет пароль, пользователь и т. Д. Но я не знаю, как запомнить, что пользователь вошёл в систему.Django, как помнить, что пользователь вошел в систему?

Я хочу показать зарегистрированным/не зарегистрированным пользователям разные меню. Пробовал как то в моем templates:

{% block Menu %} 
{% if not user.is_authenticated %} 
    <li> <a href="/posts/login">Login</a> </li> 
    <li> <a href="/posts/register/">Register</a></li> 
{% endif %} 

{% if user.is_authenticated %} 
     <li><a href="/posts">Main</a></li> 
     <li><a href="#">My profile</a></li> 
     <li><a href="/posts/logout">logout</a></li> 
    {% endif %} 
{% endblock %} 

Но это работает только один раз и только с render_to_response + RequestContent Все остального времени у меня есть первый вариант. (Вход, зарегистрируйтесь)

Итак, как я могу запомнить, что пользователь вошел в систему?

p.s. извините за мой плохой английский

+0

Да, вам нужен RequestContext, поскольку он автоматически передает объект 'user' в шаблон. Что кажется неправильным? –

+0

@ DanielRoseman, когда я возвращаюсь на главную страницу, после входа в систему он не работает, и у меня снова есть (Login, Register) вариант (но я уже вошел в систему) вместо 2. –

ответ

0

Добавление комментария Daniel Роземан в ...

Если вы хотите использовать render_to_response и иметь доступ к данному объекту запроса в шаблонах, вам нужно пройти по RequestContext, а также. https://docs.djangoproject.com/en/dev/topics/http/shortcuts/#django.shortcuts.render_to_response

return render_to_response('my_template.html', 
    my_data_dictionary, 
    context_instance=RequestContext(request)) 

Вы можете взглянуть на использовании рендеринга вместо хотя, как это уже включает в себя RequestContext для вас. https://docs.djangoproject.com/en/dev/topics/http/shortcuts/#render

+0

Исправить до последнего точка. 'user' предоставляется автоматически включенным« обработчиком контекста 'auth', но' request' is * not *: вам нужно добавить 'django.core.context_processors.request' для доступа к нему. –

+0

@ DanielRoseman спасибо за исправление :) –

+0

Спасибо за ваш ответ :) Однако, может быть, есть еще один способ запомнить, что пользователь вошел в систему и использовал его в шаблоне? Что-то с сеансами, cookis и т. Д.? –

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