Привет. Продолжаю ковырять джангу, и сейчас остановился на авторизации и сессиях. Процедуру авторизации я реализовал следующим образом:
def login(request):
username = request.POST['username']
password = request.POST['password']
user = auth.authenticate(username=username, password=password)
if user is not None and user.is_active:
# Правильный пароль и пользователь "активен"
auth.login(request, user)
request.session["is_auth_ok"] = '1'
# Перенаправление на "правильную" страницу
return HttpResponseRedirect('/')
else:
request.session["is_auth_ok"] = '0'
# Возврат на страницу с авторизацией
return HttpResponseRedirect('/accounts/login/')
def logout(request):
auth.logout(request)
# Перенаправление на страницу.
return HttpResponseRedirect("/accounts/login/")
Принцип такой: при входе на страницу все ссылки не активны, есть форма:
Логин:
Пароль:
Так как страница с формой запроса пароля и все остальные страницы(доступны только после авторизации) наследуют шаблоны от одного базового, решено было кнопку Logout разместить именно на базовом шаблоне, но показывать её только в том случае если пользователь авторизован.
Я пытался это сделать следующими методами:
1)Сначала просто включил в базовый шаблон:
{% if is_authenticated %}
{% endif %}
но так не заработало.
2)Затем я решил передавать после авторизации в сессию значение is_auth_ok, равное 1 в случае успешной авторизации и 0 в случае провала. Затем я написал функции представления следующего вида:
@login_required
def main(request):
is_auth_ok = request.session["is_auth_ok"]
return render_to_response('index.html', {'is_auth_ok':is_auth_ok})
в которых перед генерацией страницы из сессии вычитывается is_auth_ok который передается в шаблон:
{% if is_auth_ok %}
{% endif %}
В принципе такая схема работает, но мне кажется что она какая то костыльно-педальная. И что нормальные люди так не делают Что скажете?