Django request.POST.get() returns None
Django request.POST.get() returns None
我遇到了问题,但找不到解决方案。
我正在尝试在登录后重定向到上一页。提交后尝试 request.POST.get() 时,?next=request.path returns none 不知何故。
这是我的 Html 代码,它将用户引导至登录页面,将 request.path 作为 "next page after login" 值。
{% if user.is_authenticated %}
<button class="btn" data-toggle="modal" data-target="#inquiryModal">
<a class="btn btn-primary border rounded-0"
role="button" href="#">Make an Inquiry</a>
</button>
{% else %}
<a class="btn btn-primary border rounded-0" role="button"
href="{% url 'login' %}?next={{ request.path|urlencode }}"
>Make An Inquiry</a>
{% endif %}
这是登录页面 html 代码。
<div class="login-clean" style="background-color: #fff;">
<form action="{% url 'login' %}" method="POST">
{% csrf_token %}
<!--- ALERTS -->
{% include 'partials/_alerts.html' %}
<div class="form-group">
<input class="form-control" type="email" name="email" placeholder="Email"></div>
<div class="form-group">
<input class="form-control" type="password" name="password" placeholder="Password">
</div>
<div class="form-group">
<button class="btn btn-primary btn-block" type="submit">Log In</button>
</div>
</form>
</div>
Views.py 文件
def login(request):
if request.method == 'POST':
email = request.POST['email']
password = request.POST['password']
valuenext = request.POST.get('next')
print(valuenext)
user = auth.authenticate(username=email, password=password)
# if user is found and not from listing page login and redirect to dashboard
if user is not None and valuenext == "":
auth.login(request, user)
messages.success(request, 'You are now succesfully logged in')
return redirect('dash_inquiries')
# if user is found and from specific listing page login and redirect to the listing
elif user is not None and valuenext != "":
auth.login(request, user)
print("success")
messages.success(request, 'You are now logged in')
return redirect(valuenext)
else:
messages.error(request, 'Invalid credentials')
return redirect('login')
else:
return render(request, 'accounts/login.html')
我在这里做错了什么?指向登录页面时,下一个值在 url 中传递,但我似乎没有正确获取()后端中的下一个值,因为它一直返回 None。
提前致谢。
单击以下按钮将发送 GET
请求。
<a class="btn btn-primary border rounded-0" role="button"
href="{% url 'login' %}?next={{ request.path|urlencode }}">Make An Inquiry</a>
此获取请求将呈现 accounts/login.html
模板。
您正在为 POST
请求解析 request.POST.get('next')
。但是
中没有下一个
<form action="{% url 'login' %}" method="POST">
您的 form
标签需要看起来像
<form action="{% url 'login' %}next={{ next }}" method="POST">
要解决上述问题,您需要将'next'解析为request.GET
,并将其添加到context
以进行响应。
if request.method == 'POST':
# handle POST
else:
next = request.GET.get('next', '')
context = {'next': next}
return render(request, 'accounts/login.html', context=context)
然后,将 next
添加到 form.action
。
<form action="{% url 'login' %}next={{ next }}" method="POST">
好的,所以我不确定是否将下一个值传递到登录表单中,因此解决方案是添加一个隐藏的输入以获取请求中的下一个值:
<input type="hidden" name="next" value="{{ request.GET.next }}" />
我遇到了问题,但找不到解决方案。
我正在尝试在登录后重定向到上一页。提交后尝试 request.POST.get() 时,?next=request.path returns none 不知何故。
这是我的 Html 代码,它将用户引导至登录页面,将 request.path 作为 "next page after login" 值。
{% if user.is_authenticated %}
<button class="btn" data-toggle="modal" data-target="#inquiryModal">
<a class="btn btn-primary border rounded-0"
role="button" href="#">Make an Inquiry</a>
</button>
{% else %}
<a class="btn btn-primary border rounded-0" role="button"
href="{% url 'login' %}?next={{ request.path|urlencode }}"
>Make An Inquiry</a>
{% endif %}
这是登录页面 html 代码。
<div class="login-clean" style="background-color: #fff;">
<form action="{% url 'login' %}" method="POST">
{% csrf_token %}
<!--- ALERTS -->
{% include 'partials/_alerts.html' %}
<div class="form-group">
<input class="form-control" type="email" name="email" placeholder="Email"></div>
<div class="form-group">
<input class="form-control" type="password" name="password" placeholder="Password">
</div>
<div class="form-group">
<button class="btn btn-primary btn-block" type="submit">Log In</button>
</div>
</form>
</div>
Views.py 文件
def login(request):
if request.method == 'POST':
email = request.POST['email']
password = request.POST['password']
valuenext = request.POST.get('next')
print(valuenext)
user = auth.authenticate(username=email, password=password)
# if user is found and not from listing page login and redirect to dashboard
if user is not None and valuenext == "":
auth.login(request, user)
messages.success(request, 'You are now succesfully logged in')
return redirect('dash_inquiries')
# if user is found and from specific listing page login and redirect to the listing
elif user is not None and valuenext != "":
auth.login(request, user)
print("success")
messages.success(request, 'You are now logged in')
return redirect(valuenext)
else:
messages.error(request, 'Invalid credentials')
return redirect('login')
else:
return render(request, 'accounts/login.html')
我在这里做错了什么?指向登录页面时,下一个值在 url 中传递,但我似乎没有正确获取()后端中的下一个值,因为它一直返回 None。
提前致谢。
单击以下按钮将发送 GET
请求。
<a class="btn btn-primary border rounded-0" role="button"
href="{% url 'login' %}?next={{ request.path|urlencode }}">Make An Inquiry</a>
此获取请求将呈现 accounts/login.html
模板。
您正在为 POST
请求解析 request.POST.get('next')
。但是
<form action="{% url 'login' %}" method="POST">
您的 form
标签需要看起来像
<form action="{% url 'login' %}next={{ next }}" method="POST">
要解决上述问题,您需要将'next'解析为request.GET
,并将其添加到context
以进行响应。
if request.method == 'POST':
# handle POST
else:
next = request.GET.get('next', '')
context = {'next': next}
return render(request, 'accounts/login.html', context=context)
然后,将 next
添加到 form.action
。
<form action="{% url 'login' %}next={{ next }}" method="POST">
好的,所以我不确定是否将下一个值传递到登录表单中,因此解决方案是添加一个隐藏的输入以获取请求中的下一个值:
<input type="hidden" name="next" value="{{ request.GET.next }}" />