Django forms: reload view after post

20,898

Solution 1

I may misunderstand your intension. But I think when the form is valid you should do something like:

if form.is_valid():
    actkey = request.POST['actkey']
    activate( '', actkey )
    return render_to_response( 'profile/register.html', { 'message' : message } )

ie. omit the form object after you activate the user.

Solution 2

You should redirect after a successful form submission

 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('/')
Share:
20,898
Bloeper
Author by

Bloeper

I am Tom Sleebe a 21 year old guy from the Netherlands. Basically everything what has to do with programming has my interest. Although i do have very much interest in Linux to!

Updated on January 03, 2022

Comments

  • Bloeper
    Bloeper over 2 years

    I have the following view code:

    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 } )
    

    What it does is simple, when the activation key is given through the URL, it goes to: profile = userprofile.... etc. But when it's not given it loads the django form so the user can type it's activation code (all works well so far) But when the user posts his activation key it comes in the if len( actkey ) != 40: That shouldn't happen because the activation key is 40... But since it shows the form again, but activates the user as well i get unwanted behavior...

    How can i fix this?

    Thanks for the help