Python 重定向到发送请求的同一url views.py url.py urlpatterns+=patterns('beenthere.views', #beenthere URL (r"美元","指数"),, (r“^home2/$”,“类别”), (r“^accounts/login/$”,“login\u user”), (r“^accounts/register/$”,“register\u user”), (r“^home/(?P\w*)$,“home”), (r“^logout/”,“logout\u user”), ) 怀疑
如何重定向发送请求的相同url,我尝试使用request.path,但它将我重定向到/accounts/login/url,这是不需要的 您需要做的是在显示登录表单时跟踪推荐人是什么,可能会将该值存储在用户会话中,然后在用户成功登录后将其重定向回该url 大致如下:Python 重定向到发送请求的同一url views.py url.py urlpatterns+=patterns('beenthere.views', #beenthere URL (r"美元","指数"),, (r“^home2/$”,“类别”), (r“^accounts/login/$”,“login\u user”), (r“^accounts/register/$”,“register\u user”), (r“^home/(?P\w*)$,“home”), (r“^logout/”,“logout\u user”), ) 怀疑,python,django,django-views,Python,Django,Django Views,如何重定向发送请求的相同url,我尝试使用request.path,但它将我重定向到/accounts/login/url,这是不需要的 您需要做的是在显示登录表单时跟踪推荐人是什么,可能会将该值存储在用户会话中,然后在用户成功登录后将其重定向回该url 大致如下: def login_user(request): if request.POST: sform = LoginForm(request.POST) rform = UserForm()
def login_user(request):
if request.POST:
sform = LoginForm(request.POST)
rform = UserForm()
if sform.is_valid():
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(username = username,password = password)
if user is not None:
if user.is_active:
login(request,user)
return redirect(request.path)
else:
state = "Your account is not active."
#or first set the user to is active and then log in
return redirect(req.session['after_login_url'],user = user)
return render_to_response('home.html',{'state':state,'user':user},context_instance = RequestContext(request))
else:
state = "Incorrect Username or Password"
#sform = LoginForm()
form = LoginForm()
return render_to_response('register.html',{'state':state,'sform':sform,'rform':rform,'form':form},context_instance = RequestContext(request))
else:
state = "Invalid form"
dLoginForm = LoginForm()
rform = PartialSignupForm()
return render_to_response('register.html',{'sform':sform,'rform':rform,'form':form},context_instance = RequestContext(request))
else:
dLoginForm = LoginForm()
rform = PartialSignupForm()
req.session['after_login_url'] = req.META.get('HTTP_REFERER')
return render_to_response('category.html',{'dLoginForm':dLoginForm,'rform':rform},context_instance = RequestContext(request))
当然,您还应该添加检查以确保HTTP\u REFERER头存在,并确保
after\u login\u url
键存在(并且可能有一个正常值,以防外部站点直接链接到您的登录页面或类似页面),并且如果这些测试中的任何一个失败,都有一个安全回退(比如可能是用户的个人资料页,或者您的站点索引页)。谢谢joe,但是没有任何Simpler解决方案,如果我直接使用request.META.get('HTTP\u REFERER'),会怎么样在提交表单时重定向HTTP_REFERER将是登录表单本身。HTTP_REFERER是用户加载当前页面时来自的URL,因此如果您想在提交表单后使用该URL重定向他们,您必须在他们最初查看表单时获取它。是的,我明白您的意思,但我使用的是登录rm和注册表单在同一页上,它们是对话框表单,所以它是动态的,所以HTTP_REFERER是我希望它重定向的同一个url,所以它在我的情况下工作,但我们的解决方案更通用,谢谢
urlpatterns += patterns('beenthere.views',
#beenthere urls
(r'^$','index'),
(r'^home2/$','category'),
(r'^accounts/login/$','login_user'),
(r'^accounts/register/$','register_user'),
(r'^home/(?P<user>\w*)$','home'),
(r'^logout/','logout_user'),
)
def login_user(request):
if request.POST:
sform = LoginForm(request.POST)
rform = UserForm()
if sform.is_valid():
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(username = username,password = password)
if user is not None:
if user.is_active:
login(request,user)
return redirect(request.path)
else:
state = "Your account is not active."
#or first set the user to is active and then log in
return redirect(req.session['after_login_url'],user = user)
return render_to_response('home.html',{'state':state,'user':user},context_instance = RequestContext(request))
else:
state = "Incorrect Username or Password"
#sform = LoginForm()
form = LoginForm()
return render_to_response('register.html',{'state':state,'sform':sform,'rform':rform,'form':form},context_instance = RequestContext(request))
else:
state = "Invalid form"
dLoginForm = LoginForm()
rform = PartialSignupForm()
return render_to_response('register.html',{'sform':sform,'rform':rform,'form':form},context_instance = RequestContext(request))
else:
dLoginForm = LoginForm()
rform = PartialSignupForm()
req.session['after_login_url'] = req.META.get('HTTP_REFERER')
return render_to_response('category.html',{'dLoginForm':dLoginForm,'rform':rform},context_instance = RequestContext(request))