繁体   English   中英

成功注册后Django重定向用户不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM