2012-04-07 34 views
0

我使用此代碼來驗證我的views.py中登錄/認證的用戶。django在views.py中的基本用戶驗證

@login_required 
def my_view(request, username): 
    try: 
     user = User.objects.get(username=username) 
    except User.DoesNotExist: 
     raise Http404(u'User not Found') 
    if user == request.user and request.user.is_authenticated(): 
     variables = RequestContext(request, {}) 
     return render_to_response('my_template.html', variables) 

是否有另一種方法(即更少的代碼)來驗證用戶,還是我需要把它放在每個視圖?

回答

1

request.userlogin_required當前登錄的用戶,你不需要通過用戶名檢查一遍,因而沒有必要檢查is_authenticated。如果您只想渲染一個頁面,其中包含不同用戶類型的邏輯,請嘗試下面的代碼,如果不是,則使用request.user。另請使用get_object_or_404render快捷方式。

from django.shortcuts import get_object_or_404, render 
@login_required 
def my_view(request, username): 
    if username == request.user.username: 
     return render(request, 'my_template.html', {}) 
    # render the page of user who is not request.user 
    user = get_object_or_404(User, username=username) 
    # ... 
+0

非常感謝你,爲什麼'render'比'render_to_response'更好,爲什麼喜歡'get_object_or_404',而不是'嘗試/ except'? – xpanta 2012-04-07 04:35:37

+1

@xpanta就像它們的模塊名稱'shortcuts'代表的一樣,它們可以幫助您輸入較少的沸騰代碼,從而減少出錯的可能性。另外,'get_object_or_404'幾乎和w/try /是一樣的,只是它會得到一個模型對象,如果失敗的話會引發Http404; [render](https://docs.djangoproject.com/en/1.4/topics/http/shortcuts/#render)與render_to_redering相同,但始終使用RequestContext – okm 2012-04-07 04:59:45