IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Django - 边学Django边写毕业设计(day09 个人信息和修改密码) -> 正文阅读

[Python知识库]Django - 边学Django边写毕业设计(day09 个人信息和修改密码)

2021.9.30

1.个人信息完善

1.1 个人信息form表单实例知识点

  1. 首先,实例化表单的时候,要让他有初始数据,得加个**initial={}**属性。
  2. 如果修改了表单内容,没有没有在实例化的时候提供instance=要修改的模型实例,则会创建新的一条数据,如果提供了则是修改instance参数传的模型实例。
  3. CharField如果传过来是空的,在数据库中就是空字符串,而不是null了。刚好省的判断是否为null

1.2 form表单知识点

  1. 一开始我给不可修改的数据加了disabled属性,发现POST无法将disabled数据传过来,所以验证一直显示这个字段是必填的。百度之后,将不可修改数据改成readonly,就可以了。可以看出disabled与readonly的区别。
    (这算是前端知识,由于我写在form里就算是form表单知识吧,就不再分前端知识这样了,毕竟现在先把重点放在后端)
  2. DateField字段,渲染到前端type竟然是text,想要用日历选时间,将type改为date
  3. 下拉框选择的部件是Select 而不是什么什么Input
  4. 字段的Meta类,因为我不希望密码在个人信息里做修改,但其他字段可以,之前是用fields=[想要展示的字段列表]或者全部展示fields = ‘__all__’ ,现在只需要排除一个,可以用exclude = [排除的字段列表]
  5. 对生日进行校验,首先先判断这个数据是否有输入,因为无非就是两种情况,要么初始值空,要么一定有数据,所以只需要判断是否存在,如果不存在则不让他做时间的比较,否则会报错。
  6. 经过验证,生日字段type=date 传过来数据类型也是Date和当前时间datetime.time.today()类型一致,可以直接做相减,返回一个timedelta对象,**timedelta.days()**即相差多少天,今天-大于今天的肯定是负数,如果timedelta.days()<0 则抛出时间错误。

1.3 纠结了一早上的问题
就是对个人信息页面GET的时候,就算form添加了initial,给了值也是无法显示数据库已存的生日日期。
在这里插入图片描述
在console里发现了这个问题,似乎是时间格式化问题。
我看了一下渲染的HTML,有时间的value,但格式是‘YYYY/MM/DD’,好像没法在里显示出来,格式应该是要YYYY-MM-DD。
尝试过用JQuery修改,因为不熟练,没效果。
后来查文档的DateInput部件,
在这里插入图片描述
发现有个format参数可以修改格式。于是添加上,成了!
在这里插入图片描述
果然应证了那句话:你能想到的,Django都为你想好了

2.我终于可以写修改密码页面了,呜呜呜

(插一嘴,Markdown要另起有序列表,先换行,再tab,再点有序列表)

  1. 还是惯例
    ①先在work/urls.py添加一条路由
    ②再在work/views.py里加入视图函数
    ③在work/templates创建html模板
  2. 实现方式和前面的很像,不多加赘述,来讲讲遇到的问题

3.遇到的问题

  1. 表单验证时,可能会因为前面的字段没通过验证,导致后面的验证需要前面的cleaned_data的值的时候取不到值而报错。

例如:旧密码验证抛出错误,cleaned_data里就没有旧密码的值。而新密码要验证是否与旧密码一致,如果用old_pwd = self.cleaned_data[‘old_pwd’]强取,则会报错。所以为了避免强取报错,我改用
old_pwd = self.cleaned_data.get(‘old_pwd’),
这就意味着如果cleaned_data即使没有旧密码,也不会报错,而是返回None。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-01 16:48:38  更:2021-10-01 16:50:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 16:52:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码