GET 格式 POST
GET in POST form
我想在用户登录到他访问的上一个页面后重定向他。
我所做的不起作用。
错误
'QueryDict' object has no attribute 'next'
template.html
{% if request.GET.next %}
<form action="{% url "membres.views.login" %}?next={{ request.GET.next }}" method="post" novalidate class="row">
{% else %}
<form action="{% url "membres.views.login" %}?next=/" method="post" novalidate class="row">
{% endif %}
view.py
def login(request):
if request.user.is_authenticated():
return redirect('/')
else:
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user = authenticate(username=username, password=password)
if user:
if user.is_active:
auth_login(request, user)
user = User.objects.get(username=username)
user_profile = UserProfile.objects.get(user=user)
request.session['user_username'] = username
request.session['user_slug'] = user_profile.slug
messages.success(request, "Connexion réussie")
return redirect(request.GET.next)
else:
messages.error(request, "Vous n'êtes plus autorisé à vous connecter")
else:
messages.error(request, "Votre identifiant et/ou mot de passe n'est pas correct")
else:
form = LoginForm()
return render(request, 'membres/login.html', locals())
知道为什么它不起作用吗?
感谢您的帮助。
request.GET
是类字典对象,不要做request.GET.next
,做:request.GET["next"]
.
更好的是,考虑这样做:request.GET.get('next', '/some_default')
这样如果 ?next=
丢失,您就不会崩溃。
请注意,这仅适用于您的观点。在模板中,Django 会理解 request.GET.next
请注意,您可能会发现在表单中将 next
作为 hidden
输入传递更简单(否则您应该转义 ?next=...
部分)。
我想在用户登录到他访问的上一个页面后重定向他。 我所做的不起作用。
错误
'QueryDict' object has no attribute 'next'
template.html
{% if request.GET.next %}
<form action="{% url "membres.views.login" %}?next={{ request.GET.next }}" method="post" novalidate class="row">
{% else %}
<form action="{% url "membres.views.login" %}?next=/" method="post" novalidate class="row">
{% endif %}
view.py
def login(request):
if request.user.is_authenticated():
return redirect('/')
else:
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user = authenticate(username=username, password=password)
if user:
if user.is_active:
auth_login(request, user)
user = User.objects.get(username=username)
user_profile = UserProfile.objects.get(user=user)
request.session['user_username'] = username
request.session['user_slug'] = user_profile.slug
messages.success(request, "Connexion réussie")
return redirect(request.GET.next)
else:
messages.error(request, "Vous n'êtes plus autorisé à vous connecter")
else:
messages.error(request, "Votre identifiant et/ou mot de passe n'est pas correct")
else:
form = LoginForm()
return render(request, 'membres/login.html', locals())
知道为什么它不起作用吗?
感谢您的帮助。
request.GET
是类字典对象,不要做request.GET.next
,做:request.GET["next"]
.
更好的是,考虑这样做:request.GET.get('next', '/some_default')
这样如果 ?next=
丢失,您就不会崩溃。
请注意,这仅适用于您的观点。在模板中,Django 会理解 request.GET.next
请注意,您可能会发现在表单中将 next
作为 hidden
输入传递更简单(否则您应该转义 ?next=...
部分)。