Django保留注册信息

时间:2017-07-18 20:42:21

标签: python 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)

我认为我必须在" view_register"中启用变量" identifyiant"," email"等。一旦我有了这些变量,就很容易在模板中调用它们。

是否有将这些变量传递给register_view的想法?

3 个答案:

答案 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信息时,您无法使用输入的数据填充表单对象,因为它不会在请求之间保留。

解决这个问题的两种方法。

  1. 使用request.session保存信息,并在重定向时使用它来填充表单。

  2. (推荐)使用单一视图方法显示和处理注册信息。

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

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