2009-10-22 4 views
3

저는 장고로 놀고있어 사용자가 URL http:///localhost:8000/username/info/을 통해 정보에 액세스 할 수있는 작은 응용 프로그램을 만들었습니다. http:///localhost:8000/username/info/edit/을 통해 해당 정보를 편집하는 기능을 추가하고 싶지만 현재 로그인 한 사용자 (django.contrib.auth 사용)가 자신의 정보에만 액세스 할 수 있도록하고 싶습니다.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 

그래서, 분명히, 나는 정보가 사용자에 속하는 편집 할 사용자 '조니'를 원하지 않는다 : 나는 (URL에서 캡처보기 인수에 사용자 이름) 뷰에서 다음을 수행하여이 작업을 수행 'jimmy'는 브라우저를/jimmy/info/edit /로 지정하면됩니다. 위의 작품,하지만 내 관심사는 보안이가는 한 여기에 뭔가를 놓치고있다. 이게 올바른 방향일까요? 감사합니다. .

+2

: 내 프로필보기

@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, }) 

그런 다음 템플릿에 단순히 같은 재료를 사용합니다. –

답변

2

이것은 보안 위험없이 눈에 띄는 작업을 수행하는 데 적합합니다.

하지만 다른 사람이이 위치의 프로필이나 다른 사람을 볼 수 없다면 왜 사용자 이름을 표시해야합니까? 더 많은 '계정'페이지가 아닌가요? 그런 다음 URL에있는 사용자 이름을 확인하지 않을 것입니다. 이동할 수있는 유일한 URL은 계정이며 로그인 한 사용자 정보를로드합니다.

+0

나는 본다. 사용자가 다른 사람들의 정보를 볼 수있게하는 것에 대해 생각했지만 편집은 개인 데이터에만 제한되어야합니다. – sa125

0

@login_required를 사용하여 request.user를 구문 분석하면 다른 프로필로 끝나지 않습니다. 나는 당신의`else` 블록에서 오류 코드 403 응답의 팬이 될 것

Welcome <b>{{ user.first_name }} {{ user.last_name }}</b> 
관련 문제