何时重定向何时渲染

When to redirect when to render

我的场景:

我的应用程序在 /profile/signup/ 使用 SingupView(FormView) 处理注册。

class SignupView(FormView):

    template_name = "profile/signup.html"
    template_name_signup_confirmed = "profile/created.html"
    template_name_inactive = "profile/inactive.html"

    def form_valid(self, form):

        # Create and save inactive user
        self.created_user = self.create_user(form, commit=False)
        self.created_user.is_active = False
        self.created_user.save()

        # Create and save user's profile
        profile = self.create_profile(form)

        # Send registration email
        self.send_registration_email([self.created_user.email], registration_code=profile.registration_code)

        # Response
        return render_to_response(self.template_name_signup_confirmed, {'email': self.created_user.email})

    def form_invalid(self, form):
            if 'email' in form.errors and form.errors['email'].as_text() == \
                    '* An inactive user is registered with this email address.':
                return render_to_response(self.template_name_inactive, {'email': form.data["email"]})
            return render_to_response(self.template_name, self.get_context_data(form=form))

SingupView().form_valid(form) 中创建了用户及其个人资料,用户已注册,但处于非活动状态。

在那之后,在我的例子中没有成功 url 重定向,而是在同一地址 (/profile/signup/) 呈现一个新页面,并带有新的 html 说 "An email was sent at youremail@email.com, check and activate".

同样的情况,当一个不活跃的注册用户尝试再次注册时,他会得到一个新页面,在相同的地址 /profile/signup/ 上显示 'Your email youremail@email.com is already in our db but is not active.. .'

我的问题:

这种行为的常见模式是使用重定向。

我个人更喜欢这样,因为它避免了一个视图做两件事的混淆 - 一个视图显示和处理表单,另一个显示成功消息。

如果用户第二次POST表单数据,你会怎么做?

https://en.wikipedia.org/wiki/Post/Redirect/Get

我不知道使用渲染而不是重定向会带来更大的安全风险(尽管拥有更多专业知识的人可能比我更了解这一点)。