首页 > 解决方案 > Django] 我的注册表单不起作用

问题描述

我来找你是因为我的表格有问题。让我解释一下,当我在输入中输入信息并单击按钮时,它绝对什么都不做,没有任何错误消息。

这是views.py:

from django.shortcuts import render, redirect
from django.http import HttpResponseRedirect
from .models import Movies
from .forms import CreateUserForm
from django.contrib import messages
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login, logout
from django.conf import settings
from django.contrib.auth.decorators import login_required




# Create your views here.
def home(request):
    context = {
        'movies': Movies.objects.all()
    }
    return render(request, 'list/home.html', context)


@login_required(login_url='login-page')
def add(request):
    return render(request, 'list/add.html', {'title': 'Add Movies'})



def signup(request):
    if request.method == 'POST':
        form = CreateUserForm(request.POST)
        if form.is_valid():
            form.save(commit=True)
            return redirect('list-home')
    else:
        form = CreateUserForm()
    return render(request, 'list/sign.html', {'form': form})

这是forms.py:

from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User

class CreateUserForm(UserCreationForm):
    username = forms.CharField(max_length=50, required=True, widget=forms.TextInput(attrs={"placeholder": "Your pseudo:"}))
    first_name = forms.CharField(max_length=50, required=True, widget=forms.TextInput(attrs={"placeholder": ">Your first name:"}))
    last_name = forms.CharField(max_length=50, required=True, widget=forms.TextInput(attrs={"placeholder": "Your  last name:"}))
    email = forms.EmailField( max_length=50, required=True, widget=forms.TextInput(attrs={"placeholder": "Your email:"}))
    password = forms.CharField(max_length=50, required=True, widget=forms.PasswordInput(attrs={"placeholder": "Your password:"}))
    password2 = forms.CharField(max_length=50, required=True, widget=forms.PasswordInput(attrs={"placeholder": "Confirm your password:"}))

    class Meta:
        model = User
        fields = ('username', 'first_name', 'last_name', 'email', 'password', 'password2')

还有我的sign.html:

{% extends "list/base.html" %}
{% block content %}
<main class="site-main" style="background-color: black; color: white;">
    <div class="form-box2">
        <h1 style="text-align: center; padding: 20px;">SIGN UP</h1>
        <form  method="POST" class="conta" style="text-align: center;">
            {% csrf_token %}
            {{form.username}}
            {{form.first_name}}
            {{form.last_name}}
            {{form.email}}
            {{form.password}}
            {{form.password2}}
            <button type="submit">Sign up</button>
        </form>
        {% if messages%}
            {% for message in messages%}
                <div class="alert alert-{{message.tags }}">{{ message }}</div>
            {% endfor %}
        {% endif %}
    </div>
</main>

{% endblock content%}

所以就在这里,我可能忘记了一些东西,但我找不到它,我希望你能帮助我。预先感谢您的帮助。

标签: pythonhtmldjangodjango-forms

解决方案


如果表单无效,您将创建一个新表单,因此该新表单不会出现任何错误。

def signup(request):
    form = CreateUserForm()  # Form for GET request

    if request.method == 'POST':
        form = CreateUserForm(request.POST)  # add the data from POST to the form
        if form.is_valid():
            form.save(commit=True)
            return redirect('list-home')

    # An invalid form will end up here with the errors in it.
    return render(request, 'list/sign.html', {'form': form})

查看您的模板,因为您只是呈现每个字段,您也不会看到附加到字段的错误。

当你启动并运行它时,试着让 Django 为你做最多的工作。也可能存在其他错误,因此您应该包括那些存在的错误;

        {% if form.non_field_errors %}
            <ul>
            {% for error in form.non_field_errors %}
                <li>{{ error }}</li>
            {% endfor %}
            </ul>
        {% endif %}

        {# To really make sure you debug this #}
        {{ form.errors }}

        <form  method="POST" class="conta" style="text-align: center;">
            {% csrf_token %}
            {{ form.as_p }}
            <button type="submit">Sign up</button>
        </form>

推荐阅读