django的from组件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | 1. 后端<br> from django import froms from django import forms from app import models class RegForm(forms.Form): username = forms.CharField(max_length = 8 ,min_length = 3 ,label = '用户名' , error_messages = { 'max_length' : '用户名最长八位' , 'min_length' : '用户名最短三位' , 'required' : '用户名不能为空' , },widget = forms.widgets.TextInput(attrs = { 'class' : 'form-control' })) password = forms.CharField(max_length = 8 ,min_length = 3 ,label = "密码" , error_messages = { 'max_length' : '密码最长八位' , 'min_length' : '密码最短三位' , 'required' : '密码不能为空' },widget = forms.widgets.PasswordInput(attrs = { 'class' : 'form-control' })) confirm_password = forms.CharField(max_length = 8 , min_length = 3 , label = "确认密码" , error_messages = { 'max_length' : '密码最长八位' , 'min_length' : '密码最短三位' , 'required' : '密码不能为空' }, widget = forms.widgets.PasswordInput(attrs = { 'class' : 'form-control' })) email = forms.EmailField(label = '邮箱' ,error_messages = { 'lnvalid' : '邮箱格式错误' , 'required' : '邮箱不能为空' , },widget = forms.widgets.EmailInput(attrs = { 'class' : 'form-control' })) def clean_username( self ): username = self .cleaned_data.get( 'username' ) user_obj = models.Userinfo.objects. filter (username = username).first() if user_obj: self .add_error( 'username' , '用户名已存在' ) else : return username def clean( self ): password = self .cleaned_data.get( 'password' ) confir_password = self .cleaned_data.get( 'confirm_password' ) if not password = = confir_password: self .add_error( 'confirm_password' , '两次密码不一致' ) else : return self .cleaned_data |
2 前端渲染
1 2 3 4 5 6 7 | { % for foo in form_obj % } <div class = "form-group" > <label for = "{{ foo.auto_id }}" >{{ foo.label }}< / label> {{ foo }} <span>< / span> < / div> { % endfor % } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· 语音处理 开源项目 EchoSharp
· 《HelloGitHub》第 106 期
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 使用 Dify + LLM 构建精确任务处理应用