python-Django-视图,网址怪异
作者:互联网
我注意到Django处理我的网址格式的行为很奇怪.用户应该登录,然后重定向到其个人资料页面.我也可以让用户编辑其个人资料.
这是我其中一个应用程序的URL模式:
urlpatterns=patterns('student.views',
(r'profile/$', login_required(profile,'student')),
(r'editprofile/$', login_required(editprofile,'student')),
)
这是针对一个名为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
无论如何,奇怪的是,当我访问/ student / profile时,即使我到达正确的页面,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是完全不同的应用程序中的功能.
解决方法:
这两种模式:
(r'profile/$', login_required(profile,'student')),
(r'editprofile/$', login_required(editprofile,'student')),
两者都符合http:// your-site / student / editprofile.
尝试:
(r'^profile/$', login_required(profile,'student')),
(r'^editprofile/$', login_required(editprofile,'student')),
Django使用模式匹配最先的视图(see number 3 here).
标签:django-urls,python,django 来源: https://codeday.me/bug/20191023/1913960.html