2010-01-05 3 views
1

je le code de vue suivant:formes Django: Générez vue après le post

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

Ce qu'il fait est simple, lorsque la clé d'activation est donnée par l'URL, il va à: profil = userprofile .. .. etc. Mais quand il est pas donné, il charge le formulaire django afin que l'utilisateur peut taper son code d'activation (tout fonctionne bien jusqu'à présent) Mais quand les messages de l'utilisateur sa clé d'activation, il est dans le if len(actkey) != 40: cela ne devrait pas se produire parce que la clé d'activation est 40 ... Mais comme il montre à nouveau la forme, mais active l'utilisateur aussi bien que je reçois un comportement indésirable ...

Comment puis-je résoudre ce problème?

Merci pour l'aide

Répondre

-1

je méprendre sur votre intension. Mais je pense que lorsque le formulaire est valide, vous devez faire quelque chose comme:

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

ie. omettez l'objet formulaire après avoir activé l'utilisateur.

+0

Cette fonction a précédé l'introduction de render() et fonctionne de manière similaire, sauf qu'elle ne rend pas la requête disponible dans la réponse. Ce n'est pas recommandé et risque d'être obsolète à l'avenir. consultez la documentation ici: https://docs.djangoproject.com/fr/1.11/topics/http/shortcuts/ – Ralphkay

1

Vous devez rediriger après une soumission de formulaire réussie

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('/') 
0

Il est à la fois pas tout à fait ce que je cherchais, mais je fixe cette façon:

def activate(request = '', actkey = ""): 
message = "" 
if len(actkey) != 40: 
    if request.method == 'POST': 
     form = ActivateForm(request.POST) 
     if form.is_valid(): 
      actkey = request.POST['actkey'] 

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

Merci pour les réponses :)

Questions connexes