Django,限制访问注册成功页面

Django,限制访问注册成功页面,django,django-forms,Django,Django Forms,这是我在几个我弄乱的框架中一直想知道的事情。假设我不想在用户注册时自动登录(我想让他们激活),我如何才能做到用户不能只访问“注册成功”页面?现在,我得到的是: def register(request): if request.method == 'POST': rf = forms.RegisterForm(request.POST)#register form pf = forms.ProfileForm(request.POST)#profile f

这是我在几个我弄乱的框架中一直想知道的事情。假设我不想在用户注册时自动登录(我想让他们激活),我如何才能做到用户不能只访问“注册成功”页面?现在,我得到的是:

def register(request):
    if request.method == 'POST':
        rf = forms.RegisterForm(request.POST)#register form
        pf = forms.ProfileForm(request.POST)#profile form (additional info)
        lf = forms.LoginForm()#login form is also on this page but is empty when registering
        if rf.is_valid() and pf.is_valid():
            newuser = User(username=rf.cleaned_data['username'],email=rf.cleaned_data['email'])
            newuser.set_password(rf.cleaned_data['password'])
            newuser.save()
            #need to mark newuser as inactive still
            profile = pf.save(commit=False)
            profile.user = newuser
            profile.save()
            return HttpResponseRedirect("/register-success/")
        return render_to_response("authentication/index.html", {'rform': rf, 'pform':pf,'lform':lf})
    return main(request)

def register_success(request):
    return render_to_response("authentication/register-success.html")
我的url配置:

(r'^register-success/$','register_success'),

我认为另一种方法是只呈现“对”响应(“authentication/register success.html”),而不执行重定向。好处是,没有人可以访问register-success.html页面,缺点是如果用户刷新页面,它将尝试重新提交帖子。最佳做法是什么?

您可以在
注册
视图中设置cookie,一个会话密钥,您可以在
注册成功
视图中仅在其存在时检查它,然后渲染页面,否则重定向到主注册。

我会坚持重定向,获得重复用户是一个相当大的风险。如果有人看到您的注册成功页面但尚未注册,会有什么风险?如果存在风险,您可以始终生成一个随机令牌,将其放入会话并将其传递到您的注册成功页面,然后在您的视图中检查令牌是否匹配。但是,对于典型的成功页面来说,这似乎需要做很多工作


我的建议是,不要担心人们不用注册就可以访问该页面。如果只是静态HTML,那么向所有人显示不会有任何风险,对吗?

现在是静态的,但可能不会。我现在正在写一个基本的web应用程序,思考人们如何处理事情。另一方面,在允许注册之前,我的注册表单会进行检查以确保用户不存在,因此如果用户重新提交,他们将返回到注册页面,表单上会显示“用户已存在”错误消息。只是一个提示,不要把太多的项目时间花在像这样你“可能”有一天需要的事情上,专注于让你的项目完成你现在确实需要的事情。您可以随时重新访问并重新考虑添加这样的功能。如果现在没有风险,我不会为此编写任何代码。如果将来会有风险,在那一点上添加此功能。是的,我同意,但鉴于此项目只是我个人对django的探索,我想我会问一下(也许还会学到一些类似于此的技巧!)