2014-12-04 77 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') 

這是我在我的views.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'對象傳遞給模板。什麼似乎是錯的? – 2014-12-04 22:10:28

+0

@DanielRoseman,當我回到主頁面,登錄後,它不起作用,我再次有(登錄,註冊)選項(但我已經登錄),而不是2. – 2014-12-04 22:20:07

回答

0

添加到丹尼爾·羅斯曼的評論...

如果你想選擇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'是* not *:你需要添加'django.core.context_processors.request'來訪問它。 – 2014-12-04 22:23:22

+0

@DanielRoseman感謝您的更正:) – 2014-12-04 22:26:51

+0

感謝您的回答:)但是,也許有另一種方法來記住用戶已登錄並在模板中使用它?會議,烹飪等的東西? – 2014-12-04 22:32:37