Django 表单实战:从 0 到 1 实现用户注册表单(Form/ModelForm 详解)

张开发
2026/4/21 6:07:19 15 分钟阅读

分享文章

Django 表单实战:从 0 到 1 实现用户注册表单(Form/ModelForm 详解)
前言在 Django 开发中表单Form是前端与后端数据交互的核心组件无论是用户注册、登录、留言还是数据提交都离不开表单。本文将带你从零搭建一个完整的 Django 用户注册表单分别使用Form和ModelForm实现包含完整步骤、代码、路由配置、模板渲染、数据验证与数据库保存新手也能直接跟着跑通 一、环境准备安装 Djangopip install django创建 Django 项目 应用# 创建项目 django-admin startproject myproject # 进入项目 cd myproject # 创建应用 python manage.py startapp userapp在settings.py中注册应用INSTALLED_APPS [ django.contrib.admin, django.contrib.auth, django.contrib.contenttypes, django.contrib.sessions, django.contrib.messages, django.contrib.staticfiles, userapp, # 注册我们的应用 ] 二、方式一使用 Django Form基础表单1. 编写 forms.py在userapp中新建forms.pyfrom django import forms class RegisterForm(forms.Form): # 用户名 username forms.CharField( min_length3, max_length20, label用户名, error_messages{ min_length: 用户名最少3位, max_length: 用户名最多20位 } ) # 密码 password forms.CharField( widgetforms.PasswordInput, min_length6, label密码 ) # 确认密码 repassword forms.CharField( widgetforms.PasswordInput, label确认密码 ) # 邮箱 email forms.EmailField(label邮箱) # 自定义验证两次密码一致 def clean(self): cleaned_data super().clean() pwd cleaned_data.get(password) repwd cleaned_data.get(repassword) if pwd and repwd and pwd ! repwd: raise forms.ValidationError(两次密码不一致) return cleaned_data2. 编写视图 views.pyfrom django.shortcuts import render, HttpResponse from django.views.decorators.http import require_http_methods from .forms import RegisterForm # 注册表单页面 require_http_methods([GET, POST]) def register(request): if request.method GET: form RegisterForm() return render(request, register.html, {form: form}) else: form RegisterForm(request.POST) if form.is_valid(): data form.cleaned_data return HttpResponse(f注册成功用户名{data[username]}) else: return render(request, register.html, {form: form})3. 配置路由 urls.py项目总路由myproject/urls.pyfrom django.contrib import admin from django.urls import path, include urlpatterns [ path(admin/, admin.site.urls), path(, include(userapp.urls)), ]应用路由userapp/urls.py新建from django.urls import path from . import views urlpatterns [ path(register/, views.register, nameregister), ]4. 编写模板 register.html在userapp中创建文件夹templates/userapp/register.html页面代码!DOCTYPE html html langzh-CN head meta charsetUTF-8 title用户注册/title style .form{ width: 400px; margin: 50px auto; } .item{ margin-bottom: 15px; } .error{ color:red; font-size:12px; } /style /head body div classform h2用户注册/h2 form methodPOST {% csrf_token %} {% for field in form %} div classitem label{{ field.label }}/label {{ field }} {% if field.errors %} div classerror{{ field.errors.0 }}/div {% endif %} /div {% endfor %} button typesubmit注册/button /form /div /body /html5. 运行项目python manage.py runserver访问http://127.0.0.1:8000/register/ 三、方式二使用 ModelForm推荐企业级用法ModelForm可以直接关联模型自动生成字段自动保存数据库开发效率极高1. 编写模型 models.pyfrom django.db import models class User(models.Model): username models.CharField(max_length20, verbose_name用户名) password models.CharField(max_length100, verbose_name密码) email models.EmailField(verbose_name邮箱) def __str__(self): return self.username2. 编写 ModelFormfrom django import forms from .models import User class UserModelForm(forms.ModelForm): # 额外添加确认密码字段 repassword forms.CharField(widgetforms.PasswordInput, label确认密码) class Meta: model User fields [username, password, email] widgets { password: forms.PasswordInput } # 验证密码 def clean(self): pwd self.cleaned_data.get(password) repwd self.cleaned_data.get(repassword) if pwd ! repwd: raise forms.ValidationError(两次密码不一致) return self.cleaned_data3. 视图保存数据require_http_methods([GET, POST]) def register(request): if request.method GET: form UserModelForm() return render(request, userapp/register.html, {form: form}) else: form UserModelForm(request.POST) if form.is_valid(): form.save() # 直接保存数据库 return HttpResponse(注册成功数据已保存到数据库) else: return render(request, userapp/register.html, {form: form})4. 生成数据表python manage.py makemigrations python manage.py migrate 四、效果展示表单页面自动渲染输入框、标签、错误提示前端实时验证用户名长度、邮箱格式、密码一致性提交成功后数据写入数据库验证失败不跳转错误信息直接显示 五、核心知识点总结Form适合无模型、纯验证的简单表单ModelForm适合与数据库交互的表单自动增删改查clean () 方法自定义表单验证逻辑form.is_valid()触发表单验证form.cleaned_data获取验证后的数据{% csrf_token %}Django 必须的安全校验 六、结语本文从创建项目 → 表单编写 → 路由配置 → 模板渲染 → 数据库保存完整实现了 Django 表单功能是 Django 后端开发必须掌握的基础技能。ModelForm是实际开发中最常用的表单方案代码简洁、功能强大建议重点掌握持续分享 Django 实战干货

更多文章