Django Setting里默认的时区是UTC(格林威治时间)

TIME_ZONE = 'UTC'USE_TZ = True

为了方便使用把它修改为北京时间,如下:

TIME_ZONE = 'Asia/Shanghai'USE_TZ = True

这样修改后出现一个问题,时区的设置只是对渲染html有效,models.DateTimeField仍然会将时间保存为UTC时间。测试验证如下:

1.在Django创建Mysite项目并下挂Blog(配置、代码省略),在Blog.Models中创建Post类。Post代码如下:

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import Userclass Post(models.Model):STATUS_CHOICES = (('draft','Draft'),('published','Published'))title = models.CharField(max_length=250)slug=models.SlugField(max_length=250,unique_for_date='publish')author = models.ForeignKey(User,on_delete=models.CASCADE,related_name='blog_posts')body=models.TextField()publish = models.DateTimeField(default=timezone.now)created = models.DateTimeField(auto_now_add=True)update = models.DateTimeField(auto_now=True)status = models.CharField(max_length=10,choices = STATUS_CHOICES,default='draft')objects = models.Manager()

在Post中设置了3个DateTimeField属性的字段,分别是publish,created,update。

2.在views中创建post_list

from django.shortcuts import render
from .models import Post# Create your views here.
def post_list(request):posts = Post.published.all()return render(request,'blog/post/list.html',{'posts':posts})

3. 在blog/urls.py中配置路径

from django.urls import path
from . import views
app_name = 'blog'
urlpatterns = [#post viewspath('',views.post_list,name='post_list'),
]

4.在blog下创建templates文件夹,并创建base.html。接着在templates下创建blog文件夹,并在blog文件夹中创建list.html

base.html

{% load static %}
<!DOCTYPE html>
<html><head><title>{% block title %}{% endblock %}</title><link href= "{% static 'blog.css' %}" rel="stylesheet"></head><body><div id="content">{% block content %}{% endblock %}</div><div id = "sidebar"><h2>My blog</h2><p>This is my blog</p></div></body>
</html>

list.html

{% extends "blog/base.html" %}
{% block title %}My Blog{% endblock %}
{% block content %} <h1>My Blog</h1>{% for post in posts %}<h2><a href = "{{post.get_absolute_url}}">{{post.title}}{{post.publish}}</a></h2><p class = "date">Published {{post.publish}} by {{post.author}}</p>{{post.body|truncatewords:50|linebreaks}}{% endfor %}
{% endblock %}

5. 修改Django自带的admin模块(blog/admin.py),使之可以用于后台编写文章。

from django.contrib import admin
from .models import Post# Register your models here.
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):list_display= ('title','slug','author','publish','status')list_filter = ('status','created','publish','author')search_fields = ('title','body')prepopulated_fields = {'slug':('title',)}raw_id_fields = ('author',)date_hierarchy = 'publish'ordering = ('status','publish')

6.启动本地服务器,在localhost:8000/admin编写测试文章

7.在localhost:8000/blog下查看文章,发现一切正常,时区是东8区(北京时间)

8.到python shell查看后台数据,问题出现了,在Post中created和publish字段保存的时间仍然是UTC时间。

>>> from blog.models import Post>>> newpost=Post.objects.get(id=10)>>> print("Created time is " +str(newpost.created))Created time is 2022-02-19 03:13:43.407694+00:00>>> print("Publish time is "+str(newpost.publish))Publish time is 2022-02-19 03:08:53+00:00
>>>

这个问题带来的直接影响是后期用reverse()按日期反转url时,会因为日期不一致(差8小时)导致反转得到的url出错。因为reverse()通过request读到的是post_list渲染在html中posts对应字段的时间,即我们浏览器显示的时间。

Django Setting的时区设置相关推荐

  1. Django 时间与时区设置问题

    Django 时间与时区设置问题 在Django的配置文件settings.py中,有两个配置参数是跟时间与时区有关的,分别是TIME_ZONE和USE_TZ 如果USE_TZ设置为True时,Dja ...

  2. Django 的系统时区设置 RPC

    PRC   Deprecated +08:00 +08:00 Link to Asia/Shanghai settings.py  文件的设置项:   TIME_ZONE = 'PRC'     来源 ...

  3. 关于Django的时区设置TIME_ZONE,USE_TZ的问题

    2019独角兽企业重金招聘Python工程师标准>>> 在Django的settings.py中,已经将时区设置成了: TIME_ZONE = 'Asia/Shanghai' USE ...

  4. django时区设置问题

    2019独角兽企业重金招聘Python工程师标准>>> 最近用Django开发项目,在使用datetime类获取.now()时,获取的时间比实际时间相差8小时左右(感觉是UTC时间) ...

  5. Django时区设置的郁闷

    第一次在windows下看到这个设置的时候,就设置成Ubuntu上时区设置的字符串"Asia/Shanghai",结果报错通不过,最后记不清楚从哪儿查的,改成GMT+8. 最近把应 ...

  6. 【MySQL】时区设置引发的卡顿

    作者:田杰 查询执行时间长引发应用感知 "卡顿" 的场景在数据库的日常支持和使用中并不少见,但由于时区设置引发的 SQL 执行"卡顿"仍然是一个有趣的现象,之前 ...

  7. mysql 设置时区_MySQL实战干货 | 如何处理由时区设置引发的 SQL 执行“卡顿”?...

    作者:田杰,阿里云数据库高级运维专家 查询执行时间长引发应用感知 "卡顿" 的场景在数据库的日常支持和使用中并不少见,但由于时区设置引发的 SQL 执行"卡顿" ...

  8. linux est 时间,Linux中的时区设置

    我通过将zoneinfo文件复制到/ etc / localtime,在我的Linux机器上将时区设置为GMT 6,但是date命令仍然将时间显示为UTCtime-6.任何人都可以向我解释这种行为吗? ...

  9. python 设置时区_python时区设置的两种方式

    第一种用pytz 第二种手动加时区再转换格式 a= datetime.datetime.today() o = datetime.timedelta(hours=8) (a+o).strftime(& ...

  10. python pytz时区设置模块

    如果你的程序要考虑时区,可以使用pytz. pytz官方文档:http://pytz.sourceforge.net/ 我使用的python版本:3.7.1 datetime模块中有tzinfo相关的 ...

最新文章

  1. HTML5 Web 客户端五种离线存储方式汇总
  2. Fiddler的介绍和配置
  3. 谈谈程序员的高薪现象是不是该整治一下了?
  4. Invalid URI
  5. Java Optionals获得更具表现力的代码
  6. 账户配置阻止使用计算机.怎样开机,开机自启动设置怎么操作 开机自启动设置如何禁止【图文介绍】...
  7. 罗格斯大学电子与计算机系排名,罗格斯大学美国大学排名及专业排名汇总(USNEWS美国大学排名版)...
  8. thinkpad linux 键盘,Linux 5.10或支持联想PC键盘快捷键
  9. Git如何创建本地分支并推送到远程仓库
  10. Jersey MongoDB的使用
  11. java 偏向锁_Java 中的偏向锁、轻量级锁和重量级锁
  12. taobao滑动验证码解决方法
  13. ThingJs操作手册
  14. CAD2018下载、安装步骤!
  15. mac打不开磁盘映像资源忙
  16. Arduino:数码管显示原理详解和Proteus仿真实验
  17. 一篇联想员工写的:联想不是我的家
  18. 有效年利率 EAR effective annual return
  19. pcDuino 刷系统-LiveSuit
  20. “抛砖引玉”晒Jncip-sp证书寻Jncie-sp战友

热门文章

  1. 思科模拟器的远程连接交换机的实现
  2. 【python学习笔记】Python的六种内置对象
  3. 基于zookeeper的统一命名服务及实现
  4. jquery-seat-charts 使用-自定义座位号 及 重新加载数据
  5. 当前时间加30分钟_“尾盘30分钟”才是黄金时间,判次日涨跌!无半点偏差,字字珠玑...
  6. Matlab中fprintf函数使用
  7. 中小企业网站建设方案
  8. VirtualBox运行出现“0x00000000指令引用的0x00000000内存。该内存不能为written”
  9. Structure SLAM 相关论文阅读(一):消影点/消失点/灭点检测提取
  10. 《战国策》的两个逻辑