[英]Django redirect user after successful registration not working
我是 Django 的新手,正在构建一个注册系统。 当用户注册成功时,它会重定向到相同的注册页面而不是主页。
视图.py
def register(request):
if request.method == "POST":
form = UserCreationForm(request.POST)
if form.is_valid():
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password')
saved_user = form.save()
saved_user.set_password(password)
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect("home")
else:
for msg in form.error_messages:
print(form.error_messages[msg])
return render(request=request,
template_name="registration/register.html",
context={"form": form})
form = UserCreationForm
return render(request=request,
template_name="registration/register.html",
context={"form": form})
注册.html
{% extends 'base.html' %}
{% block title %}Register{% endblock %}
{% block content %}
<div style="text-align:center"><h2>Register</h2></div>
<div style="text-align:center">
<form method="post" action="{% url 'register' %}">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Register">
</form>
<p>If you already have an account <a href="/login" target="blank"><strong>login</strong></a></p>
</div>
{% endblock %}
网址.py
urlpatterns = [
path('', HomePageView.as_view(), name='home'),
path('register', views.register, name='register'),
]
您需要使用 reverse 才能在 redirect() 中使用 url 名称
from django.urls import reverse
return redirect(reverse("home"))
或者如果你不想逆转
return redirect("/")
可能是因为您在user = authenticate(request, username=username, password=password)
中将user
设为None
。 因为您在设置密码后没有保存用户。 所以下面的代码应该工作:
saved_user = form.save(commit=False)
saved_user.set_password(password)
saved_user.save() # <-- Saving the Password in User
user = authenticate(request, username=username, password=password)
试试这对我有用:
kdef register(request):
if request.method == "POST":
form = UserCreationForm(request.POST)
if form.is_valid():
user = form.save()
password = self.request.POST.get('password', None)
authenticated = authenticate(
username=user.username,
password=password
)
if authenticated:
login(request, authenticated)
return redirect("/")
else:
form = UserCreationForm()
return render(request, 'register.html', {
'form': form
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.