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.