Я заметил странное поведение с тем, как Django обрабатывает мои шаблоны URL.Пользователь должен войти в систему, а затем быть перенаправлен на страницу своего профиля.У меня также есть возможность для пользователя редактировать свой профиль.
Вот мои шаблоны URL для одного из моих приложений:
urlpatterns=patterns('student.views',
(r'profile/$', login_required(profile,'student')),
(r'editprofile/$', login_required(editprofile,'student')),
)
Это приложение, называемое студентом.Если пользователь заходит в / student / profile, он должен получить представление профиля.Если они перейдут в / student / 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
В любом случае, странно то, что когда я захожу / студент / профиль, даже если ячтобы попасть на нужную страницу, login_required печатает следующее:
Going to <function profile at 0x03015DF0>
Going to <function editprofile at 0x03015BB0>
Почему он печатает оба?Почему он пытается посетить оба?
Еще более странно, когда я пытаюсь посетить / student / editprofile, страница профиля - это то, что загружается, и это то, что печатается:
Going to <function profile at 0x02FCA370>
Going to <function editprofile at 0x02FCA3F0>
Going to <function view_profile at 0x02FCA4F0>
view_profile isфункция в совершенно другом приложении.