当前位置: 首页 > news >正文

python-web应用程序-Django-From组件

python-web应用程序-Django-From组件

添加用户时

原始方法(本质)【麻烦】

def user_add(req):if req.method == 'GET':return render(req,'XXX.html')#POST请求处理:XXXXX
-用户数据没有校验
-出现错误提示
-页面上的每一个字段都需要我们重新写一遍
-关联数据需要手动获取

Django组件

Form组件(方便)

view.py:


class MyForm(Form):user = forms.CharField(widget = forms.Input)pwd = forms.CharField(widget = forms.Input)email = forms.CharField(widget = forms.Input)XXX=XXX---def user_add(req):if req.method == 'GET':form = MyForm()return render(req,'XXX.html',{'form':form})#POST请求处理:XXXXX

2.user_add.html

<form method="post">
{{ form.user }}
{{ form.pwd }}
{{ form.email }}
<!-- 自动生成:<input type="text"placeholder="姓名" name="user"/> -->
或者:
{% for field in form %}{{field.lable}}  :  {{field}}
{% endfor %}    
</form>

ModelForm组件(更方便)

在modelForm中不需要手动写类的声明

view.py:

class MyForm(ModelForm):xx = form.CharField(XXXX)  #新增加的字段class Meta:model = model.类fields = ['name','password','---']

其余与Form相同

  • 当传的对象为【对象,对象,对象,】时需要写该类的__str__方法

models.py

class depart(models.Model):title = models.CharField(max_length=10)def __str__(self):return self.title#定制返回值

给自动生成的输入框增加样式

view.py中:

class UserInfo(forms.ModelForm):class Meta:model = models.UserInfofields = ['name','password','ahe']widgets = {'name':forms.TextInput(attrs={'class':'layui-input'})'password':forms.TextInput(attrs={'class':'BootStrip-form-control'})'XXXX':XXXX }
#自动添加样式
class UserInfo(forms.ModelForm):class Meta:model = models.UserInfofields = ['name','password','ahe']def __init__(self,*args,**kwargs):super().__init__(*args,**kwargs)for name,field in self.fields.items():if name =='':XXXXX#单独处理or  continue不处理field.widget.attrs= {'class':'XXXXX','placehoder':field.label}

校验

view.py:

def user_add(req):if req.method == 'GET':form = UserInfo()return render(req,'XXX.html',{'form':form})#POST请求处理:form = UserInfo(data = req.POST)if form.is_valid():print(form.cleaned_data)else:print(form.errors)#{'name':'yulin','password':'123456'...}#models.UserInfo.object.create(XXXX)form.save()return redirect('/user/list/')#检验失败return render(req,'user_add.html',{'form',form})
#该form中存在错误信息
#前端获取错误信息
{%  for field in form  %}
<div class=”form-group"><label>{{ field.Label }}</label>{{ field }}
<span styLe="coLor: red;">{{ field.errors.0 }}	</span>
</div>
{% endfor %}

相关文章:

  • jeecg dictText字典值
  • C++:栈(stack)、队列(queue)、优先级队列(priority_queue)
  • 【计算机毕设】基于SpringBoot的民宿在线预定平台设计与实现 - 源码免费(私信领取)
  • Java算法篇之二分查找模板
  • C++ Thread多线程并发记录(3)线程创建总结
  • 基础—SQL—DML(数据操作语言)修改和删除
  • 力扣----轮转数组
  • 重学java 61.IO流 ② 字节输出流
  • 【面试宝藏】Redis 常见面试题解析
  • 如何通过PHP语言实现远程控制多路照明
  • 利用BeanFactoryPostProcessor让Bean提前被创建
  • 汽车IVI中控开发入门及进阶(二十四):杰发科技AC8015
  • 高通Android 12/13实现USB拔出关机功能
  • 了解CSS中的link和@import引入CSS的区别
  • Linux搭建PHP下的RabbitMQ环境(php-amqp/rabbitmq-c/erlang)
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 〔开发系列〕一次关于小程序开发的深度总结
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • Angular Elements 及其运作原理
  • Babel配置的不完全指南
  • conda常用的命令
  • C语言笔记(第一章:C语言编程)
  • django开发-定时任务的使用
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • maven工程打包jar以及java jar命令的classpath使用
  • REST架构的思考
  • select2 取值 遍历 设置默认值
  • 大数据与云计算学习:数据分析(二)
  • 关于extract.autodesk.io的一些说明
  • 回流、重绘及其优化
  • 利用DataURL技术在网页上显示图片
  • 免费小说阅读小程序
  • 学习Vue.js的五个小例子
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (28)oracle数据迁移(容器)-部署包资源
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (web自动化测试+python)1
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (排序详解之 堆排序)
  • (算法)Travel Information Center
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!
  • [20180129]bash显示path环境变量.txt
  • [2021ICPC济南 L] Strange Series (Bell 数 多项式exp)
  • [2023年]-hadoop面试真题(一)
  • [51单片机] 简单介绍 (一)
  • [ABC294Ex] K-Coloring
  • [AndroidStudio]_[初级]_[修改虚拟设备镜像文件的存放位置]
  • [Angular 基础] - 数据绑定(databinding)