Django 表单:发布后重新加载视图

Blo*_*per 4 forms django view

我有以下查看代码:

def activate( request = '', actkey = "" ):
    message = ""
    if len( actkey ) != 40:
        message += str( len(actkey))
        if request.method == 'POST':
            form = ActivateForm( request.POST )
            if form.is_valid():
                actkey = request.POST['actkey']
                activate( '', actkey )
        else:
            form = ActivateForm()
    else:
        profile = userprofile.objects.get( actkey = actkey )
        user = User.objects.get( id = profile.user_id )
        user.is_active = True
        user.save()
        profile.actkey = ""
        profile.save()
        message += "Uw account is succesvol geactiveerd."
        return render_to_response( 'profile/register.html', { 'message' : message } )
    return render_to_response( 'profile/register.html', { 'message' : message, 'form' : form } )
Run Code Online (Sandbox Code Playgroud)

它的作用很简单,当通过 URL 给出激活密钥时,它会转到:profile = userprofile.... 等等。但是,如果没有给出它,它会加载 django 表单,以便用户可以输入它的激活代码(所有工作都有效)到目前为止)但是当用户发布他的激活密钥时,它会出现在这if len( actkey ) != 40: 不应该发生,因为激活密钥是 40...但是由于它再次显示表单,但也激活了用户,我得到了不需要的行为.. 。

我怎样才能解决这个问题?

谢谢您的帮助

cza*_*aic 5

您应该在成功提交表单后重定向

 if request.method == 'POST':
   form = ActivateForm( request.POST )
   if form.is_valid():
     actkey = form.cleaned_data['actkey']#access cleaned_data instead of raw post
     activate( '', actkey )
     return HttpResponseRedirect('/')
Run Code Online (Sandbox Code Playgroud)