2009-10-22 43 views
3

我正在玩django,並建立了一個小應用程序,用戶可以通過url http:///localhost:8000/username/info/訪問他們的信息。我想通過http:///localhost:8000/username/info/edit/添加編輯該信息的功能,但也希望確保當前登錄的用戶(使用django.contrib.auth)只能訪問他的信息。我做到了這一點通過以下操作視圖(在視圖ARGS用戶名是URL中捕獲):django - 限制用戶只編輯他們自己的信息

@login_required 
def edit_info(request, username=''): 
    if request.user.username == username: 
     # allow accessing and editing the info.. 
    else: 
     # redirect to some error page 

所以,很顯然,我不希望用戶「約翰尼」編輯的信息屬於用戶'jimmy'只需將他的瀏覽器指向/ jimmy/info/edit /。以上的作品,但我擔心的是,在安全方面,我錯過了一些東西。這是否正確? 謝謝。

+2

我會在你的'else'塊,錯誤代碼403響應的粉絲。 – 2009-10-22 10:11:59

回答

2

這應該適用於您正在嘗試做的事情而沒有任何明顯的安全風險。

但是,爲什麼顯示他們的用戶名,如果沒有其他人可以看到至少一個配置文件或在這個位置的東西雖然?這不會更像是一個'帳戶'頁面嗎?然後,您不會檢查URL中的用戶名,唯一可以訪問的網址就是帳戶,它只會加載登錄用戶的信息。

+0

我明白了。我想讓用戶查看其他人的信息,但編輯應該只限於個人數據,當然。 – sa125 2009-10-22 09:51:55

0

通過@login_required並解析request.user,他們永遠不會終止在他人的個人資料中。我的資料查看

@login_required 
def user_profile(request): 
    """ User profile page """ 
    u = User.objects.get(pk=request.user.pk) 

    return render_to_response('myapp/user_profile.html', { 
           'user': request.user, 
           }) 

然後在模板簡單地使用這樣的東西:

Welcome <b>{{ user.first_name }} {{ user.last_name }}</b> 
相關問題