我有一个表单来创建新用户。
目前,如果用户输入弱密码或已知电子邮件地址等错误信息,则会将用户重定向到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)
我认为我必须在" view_register"中启用变量" identifyiant"," email"等。一旦我有了这些变量,就很容易在模板中调用它们。
是否有将这些变量传递给register_view的想法?
答案 0 :(得分: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视图。
答案 1 :(得分:0)
当redirect()
您的请求丢失POST信息时,您无法使用输入的数据填充表单对象,因为它不会在请求之间保留。
解决这个问题的两种方法。
使用request.session保存信息,并在重定向时使用它来填充表单。
(推荐)使用单一视图方法显示和处理注册信息。
答案 2 :(得分: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)
很重要。此表格包含所有发布数据。当它无效时,包含发布数据的表单将返回到模板。因此,表单将显示填写的所有字段和错误消息。
长话短说:当表单有错误时不要重定向。将表单实例返回到模板。