深入学习Django源码基础6 - utils中dateformat.py学习

深入学习Django源码基础9 - 简单分析DjangoORM部分 现在MVC架构开发中。m部分是提供底层数据。无论是cs还是bs越来越看重数据对象的业务处理,而不是以前原生的sql得到的数据。 因此,1个通用的关系数据库字段对应对模型对象的框架就比较重要了。有了他可以节省大量的开发时间。 本篇侧重简要分析django中的orm。 对于orm,既然是通用,那么就存在5个重要问题。 1:如何多数据库的支持 2:对象字段类型的提供 3:sq 阅读详情

跳过一些文件,选取一些比较优秀学习。今天看到dateformat文件。

头文件中给出例子

>>> import datetime
>>> d = datetime.datetime.now()
>>> df = DateFormat(d)
>>> print(df.format('jS F Y H:i'))
7th October 2003 11:39
>>>

可以看到重点是DateFormat(d)和 df.format('jS F Y H:i')

分析文件结构

...

re_formatchars = re.compile(r'(?<!\\)([aAbBcdDeEfFgGhHiIjlLmMnNoOPrsStTUuwWyYzZ])')
re_escaped = re.compile(r'\\(.)')

class Formatter(object):
    def format(self, formatstr):
        pieces = []
        for i, piece in enumerate(re_formatchars.split(force_text(formatstr))):
            if i % 2:
                pieces.append(force_text(getattr(self, piece)()))
            elif piece:
                pieces.append(re_escaped.sub(r'\1', piece))
        return ''.join(pieces)

class TimeFormat(Formatter):
    def __init__(self, t):
        self.data = t

    def a(self):
        "'a.m.' or 'p.m.'"
        if self.data.hour > 11:
            return _('p.m.')
        return _('a.m.')

    ...

class DateFormat(TimeFormat):
    year_days = [None, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]

    def __init__(self, dt):
        # Accepts either a datetime or date object.
        self.data = dt
        self.timezone = None
        if isinstance(dt, datetime.datetime):
            if is_naive(dt):
                self.timezone = LocalTimezone(dt)
            else:
                self.timezone = dt.tzinfo

    def b(self):
        "Month, textual, 3 letters, lowercase; e.g. 'jan'"
        return MONTHS_3[self.data.month]

    …

def format(value, format_string):
    "Convenience function"
    df = DateFormat(value)
    return df.format(format_string)

def time_format(value, format_string):
    "Convenience function"
    tf = TimeFormat(value)
    return tf.format(format_string)

其中,最开始2句是编译的正则。

接着是Formatter类。类中封装1个函数format(格式化字符串)

接着是TimeFormat,继承至Formatter,用来处理时间

接着是DateFormat,继承至TimeFormat,用来处理日期

接下来是2个函数,分别是日期和时间处理。


整个模块的重点是字符串分割->调用提取时间函数->组合时间字符串

r'(?<!\\)([aAbBcdDeEfFgGhHiIjlLmMnNoOPrsStTUuwWyYzZ])'

正则的意思是匹配前面不是\符号的部分。字符串为aAbBcdDeEfFgGhHiIjlLmMnNoOPrsStTUuwWyYzZ任意的字符串。

拆分以后通过getattr(self,piece)()获得字符串对应的方法并调用。返回对应的时间格式化部分。最终组成1个列表。

在把列表转换为格式化后的字符串。

深入学习Django源码基础5 - utils中archive技巧 Django源码中,utils提供是这一组工具集。与框架的交集不多。想来还是先通过这个学习一下大神的代码。 _os部分提供文件夹处理函数,跳过。继续看archive模块,这个模块主要提供解压文件处理。 首先main代码如下 from django.utils import archive archive.extract('/Users/watsy/Downloads/Archive 阅读详情

相关推荐

通过JLink下载实现工控MCU批量烧录实战案例

利用JLink下载工具实现高效稳定的工控MCU批量烧录,提升产线效率。案例详细解析了脚本配置与自动化流程,突出jlink下载的可靠性和可扩展性,适用于大规模嵌入式部署场景。

weixin_30205153的博客 812

django datetime format 日期格式化

www.jx-lab.com python 中 date,datetime,time对象都支持strftime(format)方法,但有一些区别: 1.date ,会省略 时、分、秒、毫秒 2.time ,会省略 年、月、日 下面是三种对象的格式化示例: 1.日期格式化 code: from datetime import date d=date(2014,12,11) print(d) print(d.strftime(’%Y-%m-%d’) output: datetime.date(2014,12,1

w710537643的博客 3334

生成式引擎优化(GEO)标准化操作流程:构建高效AI生成系统的全链路指南

GEO是针对生成式AI的内容优化策略,通过提升内容在AI生成答案中的引用优先级实现品牌传播。相比传统SEO,GEO使内容直接嵌入AI答案,无需用户点击链接。核心流程包括:1)逆向拆解AI问答场景,结构化知识资产;2)生产权威内容(白皮书、专利数据)和算法适配内容(PCOE模板);3)技术实现(数据投喂、模型微调);4)331渠道分发策略;5)效果监控与动态防御。需注意采用结构化数据标记、主动提交训练数据,并避免简单复制SEO策略。2025版强调内容权威性和语义优化,通过AI原生内容工程实现高效曝光。

解锁AI流量新红利!🚀 GEO优化(生成引擎优化)助您掌控AI搜索,让AI成为您的品牌最佳代言人! 1160

[Django] ORM 利用sql extra日期格式化date_format

Django框架中models的DateTimeField类型在MySQL数据库中插入的时间格式是“2019-02-16 10:25:04.186496”。 使用普通的ORM查询语句,输出的DateTimeField字段是“datetime.datetime(2019, 2, 16, 10, 8, 44, 642364)”。 如果你使用模版渲染的话,可以在前端页面使用过滤器格式化DateTimeF...

Moke 2926

KITTI数据集下载及解析

KITTI数据集下载及解析 版本 更新时间 更新内容 作者 1 V 1.0 xxx 完成主体内容 W. Xiao 2 文章目录KITTI Dataset1 简介1.1 数据采集平台1.2 坐标系2 数据解析2.1 image文件2.2 velodyne文件2.3 calib文件2.4 label文件3 KITTI可视...

u013086672的博客 5万+

R 绘制环形树状图

按大类小类的从属关系绘制环形图,并把不同值的节点设置为相应大小。要求同一类的节点应为同一颜色。 按照输入,处理代码和输出记录

weixin_43718786的博客 1872

django 日期格式化

select={"y-m-date": "date_format(create_time,'%%Y-%%m')"}).values_list("y-m-date").annotate( c=Count("nid")).values_list("y-m-date", "c")

zzijian的博客 1万+

Wi-Fi数据帧类别

QoS

1042484520@qq.com(邮箱) 3156

Django中的日期处理注意事项和自定义时间格式转换

我们在用Django创建models时,常常会涉及时间日期字段的处理,Django里日期相关Field有DateTimeField、DateField和TimeField三种类型,看似简单,但其中有一些容易出错的地方需要注意;另外,如果不习惯Django的默认时间格式,也可以自定义的修改。 DateTimeField、DateField和TimeField,其值分别对应着Python里的datetime.datetime、datetime.date和datetime.time三个实例,这三个Field里都有

w710537643的博客 8298

【目标追踪】python背景模型减除法原理及其实现

python基于背景模型差法的视频目标追踪帧差法的问题:背景模型差法目标追踪原理1. 基本思路:2. 图例讲解:3. 存在的问题&如何解决:4. 最终效果预览第一步——调用摄像头:1. 使用opencv打开视频or摄像头:2. 读取逐帧图片:第二步——处理图片:1. 转换成灰度图:3. 累加权重重构背景:3. 计算像素差:3. 使用中值滤波和膨胀腐蚀去噪:3.1 中值滤波:3.2 图像腐蚀...

梁瑛平的博客 1947

【WRF后处理】基于wrf-python处理wrf运行结果wrfout_d01

基于wrf-python处理wrf运行结果wrfout_d01

WW、forever的博客 5209

django date格式化

django的data过滤器,格式化太坑,网上介绍的有特别细,其实我只想找个年月日时分,这基本是最常用的了, 代码 {{ article.date_publish | date:'Y-n-d H:i ' }}显示效果如下 发表于 2016-12-30 06:46

bwlab的博客 1万+

ESD防护设计宝典(十九):元器件选型宝典——共模电感

然而,这位“大师”的脾气也颇为古怪,若设计者不解其性、用之不当,它非但不能抑制噪声,反而会引入信号完整性恶化、电源压降等新问题,甚至让您的系统EMC性能“雪上加霜”,导致项目在测试阶段功亏一篑。本文将带您深入共模电感的内在世界,从本质解析到参数详解,从设计陷阱到实战选型,全方位领悟其平衡艺术,掌握其应用核心,规避那些足以让项目翻车的致命陷阱。:这是存在于电路板内部的“家贼”。共模电感实质上是一个四端器件,它通过磁场的“加法”与“减法”运算,巧妙地实现了对共模噪声的抑制,同时为差模信号大开绿灯。

m0_56451176的博客 420

爬虫教程( 2 ) --- scrapy 教程、可视化管理工具、反爬框架、ai 爬虫

scrapy 教程、可视化管理工具、反爬框架、ai 爬虫

freeking101的博客 5250

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

django 过滤器 、日期格式化参数

django1.4 html页面从数据库中读出DateTimeField字段时,显示的时间格式和数据库中存放的格式不一致,比如数据库字段内容为2012-08-26 16:00:00,但是页面显示的却是Aug. 26, 2012, 4 p.m. 为了页面和数据库中显示一致,需要在页面格式化时间,需要添加{{ dayrecord.p_time|date:"Y-m-d H:i:s" }} 类似的过滤

xyp84的专栏 4万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Django 模板格式化日期

在模板中格式化日期: {{ post.date|date:”Y-m-d H:i:s” }} 转载于:https://www.cnblogs.com/dannyyao/p/9948918.html

ann49988的博客 2199

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

django时间格式化

数据库存的时间: 2018-10-19 18:08:42 前端显示为: Oct. 19, 2018, 6:08 p.m. 需要使用时间格式(与python中的年月日,时分秒略有不同): &lt;th&gt;{{ create_time | date:"Y-m-d H:i:s" }}&lt;/th&gt; 参考 django 过滤器 、日期格式化参数 ...

彭世瑜的博客 6381

Django ORM查询,在查询语句中格式化日期

Django查询,获取格式化后的日期。使用MySQL内置函数,在查询语句中格式化日期。不使用MySQL函数时,可以在前端页面使用过滤器格式化日期。

安心写bug的博客 7020

Django基础(34): Utils模块精选实用工具介绍

Django的Utils模块提供了很多强大的实用工具(utilities),可以简化我们的日常开发工作。小编我就精选几个Utils模块的工具分享给大家。django.utils.date...

大江狗 2981

深入学习Django源码基础10 - Django中http模块

Django 中 http部分 http部分 涉及到2个 1接收的请求。request 2返回的请求。response 通过截获http协议可以看到。请求的是url + key:value的原始数据。 返回的也是一样。 如何把原始数据对应请求对象和返回对象 查看Django.http模块 在request.py文件中。request对象有编码,GET

watsy 4601

基于DateFormatUtils类对Date对象做格式化

public class Test { public static void main(String[] args) { Log logger = LogFactory.getLog(Test.class); String str = DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"); logger.info(str)

743

Django升级1.9.6出现的中文本地化bug

Error日志: Error opening file for reading: Permission denied ERROR Internal Server Error: / Traceback (most recent call last): File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.p

辉 1万+

python时间格式化

方法:time.time()时间戳   time.clock  time.sleep() 睡几秒  time.gmtime()转换成元组(格林威治时区)  time.localtime()转成元组(本机时区)  time.mktime()元组转换成时间戳  time.strftime()元组转换成字  time.strptime()字符串转成元组(注意一一对应关系)  asctime()元组转成字...

hllyzms的博客 9304

深入学习Django源码基础2 - python多态技巧-运行时判断函数

学习高级语言,大家都会学习到继承,复合。对于继承,最大的优势是实现了接口和多态。 对于通过继承实现的接口部分。         C++多重继承 实现解耦,mvc分离         这里有示例。 多态部分其他语言都有讲解。 今天发现1个python实现多态的优势。 相比较java,c++的多态,需要继承的方法在基类必须定义以后,才能编译通过。(吐槽一下,大部分C++和java代码是

watsy 2053

深入学习Django源码基础15 - views简要分析学习

在django中,view有2种编码形式。 1种是function返回 1种是class返回 分析 views文件夹 views |----decorators |----__init__.py |----cache.py |----clickjacking.py |----csrf.py |----d

watsy 2007
上一篇: 深入学习Django源码基础5 - utils中archive技巧
下一篇: 深入学习Django源码基础7 - python的gettext国际化本地化
watsy
博客等级 码龄19年 133粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值