您的位置:首页 > 脚本大全 > > 正文

django中filter的参数(详解django2中关于时间处理策略)

更多 时间:2022-01-18 01:16:39 类别:脚本大全 浏览量:948

django中filter的参数

详解django2中关于时间处理策略

一、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小时

    django中filter的参数(详解django2中关于时间处理策略)

    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.pytime_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

    标签:时间 Django2
    您可能感兴趣