2017-07-18 132 views
0

我有一個表單來創建新用戶。Django保留註冊信息

目前,如果用戶輸入弱密碼或已知電子郵件地址等不良信息,用戶將被重定向到view_register開始。所以用戶必須再次輸入他的信息。

我只是想確保在view_register中的註冊表格能夠記住任何先前輸入的信息。用戶應該有可能編輯他的信息來修復他的電子郵件地址或他的密碼。

觀點:

def view_register(request): 
    form = MinimumRegisterForm() 
    return render(request, 'register.html', locals()) 

def view_games(request): 
media = settings.MEDIA 
if request.method == 'POST': 
    form = MinimumRegisterForm(request.POST) 
    if form.is_valid(): 
     identifiant = form.cleaned_data['identifiant'] 
     email = form.cleaned_data['email'] 
     password = form.cleaned_data['password'] 
     confirm_password = form.cleaned_data['confirm_password'] 
     sex = form.cleaned_data['sex'] 
     if User.objects.filter(email=email).exists(): 
      messages.add_message(request, messages.INFO, 'Cette adresse email est déjà utilisé.') 
      return redirect(view_register)    
     if password == confirm_password: 
      strengh = password[0].isalpha() 
      if all(c.isalpha() == strengh for c in password): 
       request.session['ident'] = '123456' 
       messages.add_message(request, messages.INFO, 'Le mot de passe doit contenir au moins 8 charactères lettres et chiffres.') 
       return redirect(view_register) 
      else: 
       form = GamesRegisterForm() 
       request.session['identifiant'] = identifiant 
       request.session['email'] = email 
       request.session['password'] = password 
       request.session['sex'] = sex 
       return render(request, 'games.html', locals()) 
     else: 
      messages.add_message(request, messages.INFO, 'Confirmation du mot de passe invalide.') 
      return redirect(view_register) 
    else:   
     messages.add_message(request, messages.INFO, 'Formulaire invalide.') 
     return redirect(view_register) 
else: 
    return redirect(view_register) 

我想我只需要啓用變量 「identifiant」, 「電子郵件」 等在 「view_register」。一旦我有了這些變量,就很容易在模板中調用它們。

任何想法將這些變量傳遞給register_view?

回答

1

當你的redirect()你的請求失去了POST信息,所以你不能填充表單對象與輸入的數據,因爲它不會在請求之間持續存在。

2種方法來解決這個問題。

  1. 使用request.session保存信息並在重定向時使用它填充表單。

  2. (推薦)使用單一視圖方法來顯示和處理註冊信息。

+0

我用戶返回呈現(請求,'register.html',locals())儘管重定向。它現在有效。 – GrandGTO

0

使用基於類的視圖。

from django.views.generic.edit import FormView 

class RegisterView(FormView): 
    form_class = MinimumRegisterForm 
    template_name = 'register.html' 
    success_url = reverse(<name of your view_games view>) 

這將完成所有驗證和錯誤呈現,並且如果表單有效,它將重定向到view_games視圖。

0

在文檔中有一個窗體視圖的例子。 https://docs.djangoproject.com/en/1.11/topics/forms/#the-view

from django.shortcuts import render 
from django.http import HttpResponseRedirect 

from .forms import NameForm 

def get_name(request): 
    # if this is a POST request we need to process the form data 
    if request.method == 'POST': 
     # create a form instance and populate it with data from the request: 
     form = NameForm(request.POST) 
     # check whether it's valid: 
     if form.is_valid(): 
      # process the data in form.cleaned_data as required 
      # ... 
      # redirect to a new URL: 
      return HttpResponseRedirect('/thanks/') 

    # if a GET (or any other method) we'll create a blank form 
    else: 
     form = NameForm() 

    return render(request, 'name.html', {'form': form}) 

form = NameForm(request.POST)是很重要的。這裏的表格保存所有的發佈數據。當它無效時,包含發佈數據的表單將返回到模板。因此,表單將顯示所有填寫的字段和錯誤消息。

長話短說:當表單有錯誤時不要重定向。將表單實例返回到模板。