一、django中数据模型关于时间字段的认识
1、 datefield
:可以记录年月日,映射到数据库是 date
类型
2、 datetimefield
:可以记录年月日时分秒,映射到数据库是 datetime
类型
3、 timefield
:可以记录时分秒,映射到数据库是 time
类型
二、关于 navie 时间和 aware 时间的认识
navie时间和aware时间
- navie没有指定时区的,不知道自己的时间。
- aware指定了时区,知道自己的时间。
pytz库:专门用来处理时区的库,经常更新一些时区的数据
astimezone方法
将一个时区的时间转换为另一个时区的时间,这个方法只能被'aware'类型的时间调用,
不能被'navie'类型的时间调用
1
2
3
4
5
6
7
8
9
10
11
12
13
|
import pytz
from datetime import datetime
now = datetime.now() #这是一个navie类型的时间
utc_timezone = pytz.timezone( 'utc' ) #定义utc的时区对象
utc_now = now.astimezone(utc_timezone) #将当前时区时间转换为utc时区的时间
>> valueerror: astimezone() cannot be applied to a navie datetime
# 会抛出一个异常,原因就是因为navie类型的时间不能调用astimezone方法
now = now.replace(tzinfo = pytz.timezone( 'asia/shanghai' ))
utc_now = now.astimezone(utc_timezone)
#这时候就可以进行时区的转换
#更改时间
|
三、在 django 中正确的使用时间
1、在 settings.py
中配置
1
2
3
4
|
time_zone = 'asia/shanghai' # 时区的选择
# 如果use_tz=false,那么django获取到的当前时间就是一个navie类型的时间,
# 网上很多资料写的是设置false,但是实际开发过程中设置true
use_tz = true
|
2、在一个 app
的数据模型中创建时间的字段
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
from django.db import models
class articlemodel(models.model):
"""
文章的模型
"""
title = models.charfield(max_length = 100 , verbose_name = '文章标题' )
create_time = models.datetimefield(verbose_name = '文章创建时间' )
class meta( object ):
db_table = 'article'
def __str__( self ):
return '<articlemodel>({}, {})' . format ( self .title, self .create_time)
|
3、在视图类中手动的添加一条数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
from django.shortcuts import render
from django.views import view
# 引入模块
from django.utils.timezone import now, localtime
from . import models
class articleview(view):
"""
文章的视图类
"""
def get( self , request, * args, * * kwargs):
models.articlemodel.objects.create(title = '第一篇文章' , create_time = now())
return render(request, 'article.html' )
|
4、查看数据库数据
实际上我这是差不多下午13点了,刚好相差8小时
5、查询出来的数据使用 localtime
函数转换为本地时间
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
from django.shortcuts import render
from django.views import view
# 引入模块
from django.utils.timezone import now, localtime
from . import models
class articleview(view):
"""
文章的视图类
"""
def get( self , request, * args, * * kwargs):
result = models.articlemodel.objects.get(pk = 1 )
print (result)
print (localtime(result.create_time))
return render(request, 'article.html' )
|
6、在模板( html
)中使用(自己会转换为你电脑本地时区的时间)
1
2
3
4
|
<p>{{ article.title }}< / p>
<p>{{ article.create_time }}< / p>
<! - - 直接使用django内置过滤器格式化数据 - - >
<p>{{ article.create_time | date: "y-m-d h:i:s" }}< / p>
|
7、如果你在 settings.py
中 time_zone = 'asia/shanghai'
配置不同的时区,在用户页面展示的结果也会不一样的。
四、在django中数据模型使用时间字段
1、使用字段
1
2
|
create_time = models.datetimefield(auto_now_add = true, null = true, verbose_name = '创建时间' )
update_time = models.datetimefield(auto_now = true, null = true, verbose_name = '修改时间' )
|
2、关于auto_now_add的认识
auto_now_add会在第一次添加数据的时候自动获取当前时间
3、关于auto_now的认识
auto_now会在每次对象调用save方法的时候更新为当前时间
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://juejin.im/post/5c7e1734f265da2dc2320a30