我注意到一個奇怪的行爲與Django如何處理我的url模式。用戶應該登錄,然後重定向到他們的個人資料頁面。我也有能力讓用戶編輯他們的個人資料。Django - 查看,網址奇怪
這裏是我的我的應用程序的一個URL模式:
urlpatterns=patterns('student.views',
(r'profile/$', login_required(profile,'student')),
(r'editprofile/$', login_required(editprofile,'student')),
)
這是被稱爲學生的應用程序。如果用戶轉到/ student/profile,他們應該得到配置文件視圖。如果他們去/學生/ editprofile他們應該得到editprofile視圖。我設置了一個名爲login_required的函數來對用戶進行一些檢查。這比僅僅註釋可以處理的要複雜一點。
這裏的login_required:
def login_required(view,user_type='common'):
print 'Going to '+str(view)
def new_view(request,*args,**kwargs):
if(user_type == 'common'):
perm = ''
else:
perm = user_type+'.is_'+user_type
if not request.user.is_authenticated():
messages.error(request,'You must be logged in. Please log in.')
return HttpResponseRedirect('/')
elif request.user.is_authenticated() and user_type != 'common' and not request.user.has_perm(perm):
messages.error(request,'You must be an '+user_type+' to visit this page. Please log in.')
return HttpResponseRedirect('/')
return view(request,*args,**kwargs)
return new_view
不管怎麼說,奇怪的事情是,當我訪問/學生/ profile文件,即使我得到正確的頁面,login_required打印以下內容:
Going to <function profile at 0x03015DF0>
Going to <function editprofile at 0x03015BB0>
爲什麼要同時打印?爲什麼它試圖訪問這兩個?
更加古怪,當我試圖訪問/學生/ editprofile,個人資料頁是什麼樣的負載,這是集團的印刷什麼:
Going to <function profile at 0x02FCA370>
Going to <function editprofile at 0x02FCA3F0>
Going to <function view_profile at 0x02FCA4F0>
view_profile是在一個完全不同的應用程序的功能。
關於decorators.login_required()和decorators.permission_required()是什麼讓人無法忍受? – hop 2011-01-24 19:11:20