Джанго формы: перезагрузить вид после поста - PullRequest
2 голосов
/ 05 января 2010

У меня следующий код просмотра:

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

То, что он делает, просто, когда ключ активации передается через URL, он переходит к: профиль = userprofile .... и т. д. Но когда он не указан, он загружает форму django, чтобы пользователь мог набрать его код активации (пока все работает хорошо) Но когда пользователь публикует свой ключ активации, он приходит в if len( actkey ) != 40: Этого не должно быть, потому что ключ активации равен 40 ... Но, поскольку он снова показывает форму, но также активирует пользователя, я получаю нежелательное поведение ...

Как я могу это исправить?

Спасибо за помощь

Ответы [ 3 ]

1 голос
/ 05 января 2010

Вы должны перенаправить после успешной отправки формы

 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 голосов
/ 05 января 2010

Это не совсем то, что я искал, но я исправил это так:

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

Спасибо за ответы:)

0 голосов
/ 05 января 2010

Я могу неправильно понять ваше намерение. Но я думаю, что когда форма действительна, вы должны сделать что-то вроде:

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

есть. пропустите объект формы после активации пользователя.

...