2017-07-18 154 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)是很重要的。这里的表格保存所有的发布数据。当它无效时,包含发布数据的表单将返回到模板。因此,表单将显示所有填写的字段和错误消息。

长话短说:当表单有错误时不要重定向。将表单实例返回到模板。