继续在之前创建的project499中进行操作。
1. 在models.py文件中更新代码
from django.db import models
class Article(models.Model):
id = models.BigAutoField(primary_key=True)
removed = models.BooleanField()
title = models.CharField(max_length=200)
#下行代码为新增的代码
create_time = models.DateTimeField()
2. 把模型映射到数据库当中
运行代码
python manage.py makemigrations
跳出提示如下:
选择1,然后输入timezone.now,按回车
运行如下代码:
python manage.py migrate
数据库表格中出现了create_time字段
3. 在views.py中更新代码如下
from django.shortcuts import render
from django.http import HttpResponse
from .models import Article
from django.utils.timezone import now
def index(request):
article = Article(removed=False,title='第4篇文字',create_time=now())
article.save()
return HttpResponse("success")
保存后刷新网页
数据库中新增了一条数据
但是创建时间与实际时间差了8个小时,因为系统获取的是UTC时间。
4. 使用localtime
如果想把时间转换成所在地时间,需要使用localtime。
在setting.py中修改TIME_ZONE,代码如下:
TIME_ZONE = 'Asia/Shanghai'
5. 将localtime渲染到html文件中
在templates文件夹中创建index.html文件,代码更新如下:
{% load tz %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{ create_time|localtime }}
</body>
</html>
然后在views.py文件中更新代码如下:
from django.shortcuts import render
from django.http import HttpResponse
from .models import Article
from django.utils.timezone import now
def index(request):
article = Article.objects.get(pk=1)
create_time = article.create_time
return render(request,'index.html',context={'create_time':create_time}
保存,然后刷新网页,网页出现第一条数据的创建时间
6. 数据库中自动写入时间
在models.py文件中更新代码如下:
from django.db import models
class Article(models.Model):
id = models.BigAutoField(primary_key=True)
removed = models.BooleanField(default='False')
title = models.CharField(max_length=200)
create_time = models.DateTimeField(auto_now_add=True)
然后更新views.py文件中的代码如下:
from django.shortcuts import render
from django.http import HttpResponse
from .models import Article
from django.utils.timezone import now
def index(request):
article = Article(title='第3篇文字')
article.save()
return HttpResponse('sueccess')
保存后,刷新浏览器,查看数据库,里面已经写入一条新的数据,并且创建时间也已经存储进去。
auto_now_add是在第一次添加数据进去的时候回自动获取当前时间
auto_now,每次这个对象调用save方法的时候都会将当前时间更新
一般auto_now_add用于创建时间,auto_now用于更新时间。
7. 笔记总结
django.utils.timezone.now方法
会根据setting.py文件中是否设置了USE_TZ=True来获取当前时间。如果设置了,那么就获取一个aware类型的UTC时间。如果没有设置,那么就会获取一个naive类型的时间。
django.utils.timezone.localtime方法
会根据setting.py中的TIME_ZONE来讲一个aware类型的时间转换为TIME_ZONE指定时区的时间。
来源:知了课堂