python - 在 django 中发布表单后无法重定向到 URL

标签 python django django-formwizard

我正在django1.8中创建一个用户注册系统。但是,当我单击表单上的注册按钮时,它不会重定向到成功网址。我也不确定这是否是在数据库中保存用户信息的正确方法。请推荐是否有更好的方法来处理 django 中的用户注册。

模型.py

from django.db import models
from django.contrib.auth.models import User  

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    age = models.IntegerField(blank=True)
    gender_choices = (('M', 'Male'), ('F', 'Female'))
    gender = models.CharField(max_length=1, choices=gender_choices, default='Male')

表单.py

from django import forms
from .models import UserProfile


class UserProfileForm(forms.ModelForm):
    class Meta:
        model = UserProfile
        exclude = ['user']

View .py

from django.shortcuts import render, redirect
from django.core.urlresolvers import reverse
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from .forms import UserProfileForm


# Create your views here.


def registerView(request):

    if request.method == "POST":
        user_form = UserCreationForm(request.POST)
        user_profile_form = UserProfileForm(request.POST)

        if user_form.is_valid() and user_profile_form.is_valid():
            new_user = user_form.save()
            new_user_profile = user_profile_form.save()

            return redirect(reverse('success'))

        else:
            return render(request, 'register.html', {'user_form': user_form, 'user_profile_form': user_profile_form})

    else:
        user_form = UserCreationForm(request.POST)
        user_profile_form = UserProfileForm(request.POST)

        return render(request, 'register.html', {'user_form': user_form, 'user_profile_form': user_profile_form})


def successView(request):

    username = User.objects.get('username')
    return render(request, 'success.html', {'username': username})

url.py

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^$', views.registerView, name='register'),
    url(r'^success/$', views.successView, name='success')

]

注册.html

<h1> Welcome </h1>
       <form method="POST" action="{% url 'success' %}">
           {% csrf_token %}
           {{ user_form.as_p }}
           {{ user_profile_form.as_p }}
           <input type="button" value="Register"/>
       </form>

成功.html

<h4> Yo Mr...{{ username }}</h4>
<h1>Welcome</h1>

最佳答案

您需要进行以下更改:

<h1> Welcome </h1>
       <form method="POST" action="{% url 'register' %}">
           {% csrf_token %}
           {{ user_form.as_p }}
           {{ user_profile_form.as_p }}
           <input type="submit" value="Register"/>
       </form>

关于python - 在 django 中发布表单后无法重定向到 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31049365/

相关文章:

python - 矩阵和向量的每一列之间的numpy协方差

database - Django:在嵌套数据结构中序列化模型?

Django - 匿名用户组

python - 时间模块 - strptime Django 验证错误

django - SessionWizardView 状态仅保存在最终表单上,done() 未执行

python - 如何在脚本中实现 --verbose 或 -v 选项?

python - 在 python 中使用生成器循环 n 个元素

python - CNN模型分类错误: logits and labels must be broadcastable: logits_size=[32, 10] labels_size=[32,13]

python - 如何在表单向导中使用 ModelFormSet

python - 使用 Django 向导的动态步骤数