首页 > 编程语言 >Django Form源码分析(2)

Django Form源码分析(2)

时间:2023-07-29 11:44:05浏览次数:41  
标签:__ Form form LoginForm2 Django 源码 CharField LoginForm

1 前置知识点

1.1 render函数

 

可以看到render函数先拿到模板, 再进行模板渲染

那么form函数是如何自动生成表单里的input标签呢,

应该是在form里已经渲染好一遍生成了input标签放进了{"form": form}的集合

render函数再进行渲染

2 Form函数

2.1 Form源码分析

2.1.1 Form初始化

 当我们自己写了个视图函数用来测试时

发现

可以看到在

LoginForm2里定义了 Charfield

然后 LoginForm2继承了LoginForm

LoginForm里也封装了CharField

 在这里可以看到LoginForm2 LoginForm Form都是由

metaclass=DeclarativeFieldsMetaclass

这个元类创建

 由如下打印信息可以看出来先封装LoginForm再封装额LoginForm2

先看LoginForm封装了什么

 上面的username:.. password:... 都是CharField类型基类都是Field, 添加进集合

 

 调用super()就是MediaDefiningClass的__new__创建类

这里又调用super()就是type可以看到还是由type创建

 

 django项目开始运行

如果拿

LoginForm2.base_fields = {

  CharField()

  CharField()

  CharField()

}

 __new__方法完事了, 看看__init__

找到BaseForm的__init__

 自己定义的render没有FORM_RENDERER 去全局配置找

 到这init部分结束 初始化结束

 

2.1.2 Form渲染

 HTML中 for field in form 就相当于

python中的 form[field]这个会拿到什么呢

 

标签:__,Form,form,LoginForm2,Django,源码,CharField,LoginForm
From: https://www.cnblogs.com/khalil12138/p/17587316.html

相关文章

  • Meta-Transformer 多模态学习的统一框架
    Meta-Transformer是一个用于多模态学习的新框架,用来处理和关联来自多种模态的信息,如自然语言、图像、点云、音频、视频、时间序列和表格数据,虽然各种数据之间存在固有的差距,但是Meta-Transformer利用冻结编码器从共享标记空间的输入数据中提取高级语义特征,不需要配对的多模态训练......
  • app直播源码平台开发防护技术鉴权功能的部署
    我们在生活中,常常会遇到身份验证的事情,我们每个人也会有证明身份的各种工具,就比如:在考试中我们会使用准考证进行身份验证;在乘坐高铁、飞机时,我们会用身份证或是高铁票、机票证明我们的身份。这也是为了防止有些人去顶替、冒充别人的身份去占有别人的权益的事情,也防止一些不法分子去......
  • 推荐带500创作模型的付费创作V2.1.0独立版系统源码
    ChatGPT付费创作系统V2.1.0提供最新的对应版本小程序端,上一版本增加了PC端绘画功能,绘画功能采用其他绘画接口–意间AI,本版新增了百度文心一言接口。后台一些小细节的优化及一些小BUG的处理,前端进行了些小细节优化,针对上几版大家非常关心的卡密兑换H5端及小程序端......
  • app直播源码平台开发防护技术鉴权功能的部署
     我们在生活中,常常会遇到身份验证的事情,我们每个人也会有证明身份的各种工具,就比如:在考试中我们会使用准考证进行身份验证;在乘坐高铁、飞机时,我们会用身份证或是高铁票、机票证明我们的身份。这也是为了防止有些人去顶替、冒充别人的身份去占有别人的权益的事情,也防止一些不法分......
  • Terraform
    Terraformhttps://developer.hashicorp.com/terraform/intro什么是Terraform?Terraform是一种基础设施即代码工具,可让您在人类可读的配置文件中定义云和本地资源,您可以对这些文件进行版本控制、重用和共享。然后,您可以使用一致的工作流程来配置和管理所有基础设施的整个生......
  • kernel源码(二十四)文件系统
     1minix文件系统minix文件系统磁盘结构如下所示图中,整个磁盘被划分为360个磁盘块(每个磁盘块1Kb)引导块,MBR就在这个磁盘块中。当计算机加电,ROMBIOS将会自动读取该磁盘块到内存并执行其中的代码。分区,一块磁盘,我们可以最多有4个主分区。MBR大小为一个扇区大小,其中446byte......
  • 推荐短视频流量掘金付费进群系统源码-私域变现工具
    视频流量掘金付费进群系统源码ThinkPHP框架开发,百分百可搭建!近期爆火的流量掘金,自动化成交进群系统项目详细拆解,演示地址:runruncode.com/thinkphp/19493.html 不知道大家有没有听过,半自动挂机、流量掘金、流量变现、9.9自动进群系统等相关关键词的项目。 最近这套玩法非......
  • 552页《Android开发相关源码精编解析》开源分享,优秀Android工程师必备
    2022年已过大半,回首上半年,有犹豫、有抉择、有放弃、有收获。在拼尽全力后,我度过了职业生涯的第一个七年之痒,从之前的外包小厂成功跳槽到一家一线互联网大厂,年薪从30w涨到了50w!!!在这里我想跟各位有多年开发经验的同行说一句:“无论你处在人生的那个阶段,无论你身处于那个职位,都不要摆烂......
  • Django 之前端动态数据展示
    一、结合前端页面实现ORM对数据的增删改查1、修改和删除功能的逻辑'''修改功能的逻辑'''1、确定修改哪条记录,怎么确定?通过主键id确定唯一一条记录2、点击修改的按钮,应该跳转到一个修改的页面3、应该通过id查询到原来的数据,并且把这个记录的数据展示到修改的页面4、开始......
  • Nginx代理模式下 log-format 获取客户端真实IP
    一:环境描述A:  windowsclient    10.43.2.213B:  Nginx  proxy      10.43.2.11C:  Nginx  web-server    10.43.2.54其中,A,B,C三台主机,A是通过windows中的浏览器,B是Nginx代理服务器,C是用Nginx做的web服务器,访问web的流程如下:  A————>......