何时重定向何时渲染
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.. .'
我的问题:
任何人都可以解释这是一个好的方法,还是我需要重定向到新的 urls,由新的视图控制?
使用渲染而不是重定向是否存在安全风险?特别是在用户登录 in/sign up?
在同一地址使用重定向或渲染新模板有什么区别? Django 的最佳实践是什么?
是否可以在注册确认页面以及提示用户已注册但在数据库中处于非活动状态的警告页面中显示用户的电子邮件?
这种行为的常见模式是使用重定向。
我个人更喜欢这样,因为它避免了一个视图做两件事的混淆 - 一个视图显示和处理表单,另一个显示成功消息。
如果用户第二次POST表单数据,你会怎么做?
https://en.wikipedia.org/wiki/Post/Redirect/Get
我不知道使用渲染而不是重定向会带来更大的安全风险(尽管拥有更多专业知识的人可能比我更了解这一点)。
我的场景:
我的应用程序在 /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.. .'
我的问题:
任何人都可以解释这是一个好的方法,还是我需要重定向到新的 urls,由新的视图控制?
使用渲染而不是重定向是否存在安全风险?特别是在用户登录 in/sign up?
在同一地址使用重定向或渲染新模板有什么区别? Django 的最佳实践是什么?
是否可以在注册确认页面以及提示用户已注册但在数据库中处于非活动状态的警告页面中显示用户的电子邮件?
这种行为的常见模式是使用重定向。
我个人更喜欢这样,因为它避免了一个视图做两件事的混淆 - 一个视图显示和处理表单,另一个显示成功消息。
如果用户第二次POST表单数据,你会怎么做?
https://en.wikipedia.org/wiki/Post/Redirect/Get
我不知道使用渲染而不是重定向会带来更大的安全风险(尽管拥有更多专业知识的人可能比我更了解这一点)。