1.设置urls

# 导入三个模块文件
from django.contrib import admin
from django.urls import path
from app01 import views

# 设置URL路径
urlpatterns = [
    path('admin/', admin.site.urls),
    path('student/', views.student, name='student'),
]

2.创建网页student.html

<div class="container">
    <div class="row">
        <div class="col-md-6 col-md-offset-3">
            <!-- 核心代码 ~ 开始 -->
            <!-- novalidate的作用是告诉浏览器,不要做任何过滤 -->
            <form action="" method="post" novalidate>
                <!-- POST请求必须写 -->
                {% csrf_token %}
                <!-- 循环数据(form对象) -->
                {% for field in student_list %}
                    <!-- label_tag与label区别:
                      -- label_tag在前段打印出来的字体加粗
                      -- label    在前段打印出来的字体比较细
                    -->
                    <!-- 打印label_tag字段的 -->
                    <p>label_tag打印结果==> {{ field.label_tag }}</p>
                    <!-- 打印label字段的 -->
                    <p>label打印结果==> {{ field.label }}</p>
                    <!-- 拿到每个字段,打印input框 -->
                    <p>打印field字段(input框)==> {{ field }}</p>
                    <!-- 打印field字段的错误提示信息 -->
                    <p>
                        <span>打印field字段错误==></span>
                        <span style="color: red"> {{ field.errors.0 }}</span>
                    </p>



                    <hr>
                    <hr>
                {% endfor %}
                <input type="submit" value="提交">
            </form>
            <!-- 核心代码 ~ 结束 -->
        </div>
    </div>
</div>

3.创建视图函数

from app01.forms import StudentList
def student(request):
    if request.method == 'GET':
        student_list = StudentList()
        return render(request, 'student.html', {'student_list':student_list})
    else:
        student_list = StudentList(request.POST)
        if student_list.is_valid():
            student_list.save()
            return render(request, 'student.html', {'student_list': student_list})
        else:
            return render(request, 'student.html', {'student_list': student_list})

4.建立数据库

class Student(models.Model):
    name = models.CharField(max_length=32)
    age = models.CharField(max_length=32)
    # verbose_name='性别',在前段显示的名字,与form中的label效果一样
    gender = models.CharField(max_length=32, verbose_name='性别')

5.建立form组件

from django import forms
# 导入models文件
from app01 import models
# 导入widgets模块
from django.forms import widgets

class StudentList(forms.ModelForm):
    class Meta:
        # 对应的Model中的类
        model = models.Student
        # __all__表示列出所有的字段
        fields = '__all__'
        # 排除的字段
        exclude = None

        # 自定义在前段显示的名字
        # labels = None
        labels = {
            'name':'账号',
            'age':'年龄',
        }

        # 帮助提示信息
        help_texts = None

        # 自定义插件
        # widgets = None
        widgets = {
            'name':widgets.Textarea(attrs={'class':'c1'})
        }

        # 自定义错误信息
        error_messages = {
            'name':{'required':"用户名不能为空",},
            'age': {'required': "年龄不能为空", },
        }

    # 为每个字段统一添加form-control属性
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        for filed in self.fields.values():
            filed.widget.attrs.update({'class': 'form-control'})

6.