Django 中操作数据库存储时间的技巧 (django 数据库 时间)

在开发 Web 应用程序时,操作数据库是非常常见的。而在 Django 中,要想操作数据库,开发者需要使用 Django ORM(Object Relational Mapping) 来实现。而在进行数据库操作时,时间的存储和处理也是非常重要的一个方面,因为在很多场景下,我们需要使用时间来做出一些个性化的业务逻辑。本文将介绍 Django 中操作数据库存储时间的相关技巧。

1. Django 中时间字段的定义

在 Django 中,时间字段一般是通过 models 中的 DateTimeField 来定义。这样,Django 就能够将时间存储在数据库中。下面是定义时间字段的一个例子:

“`

from django.db import models

class Article(models.Model):

title = models.CharField(max_length=100)

created_at = models.DateTimeField(auto_now_add=True)

updated_at = models.DateTimeField(auto_now=True)

“`

上述代码定义了一个名为 Article 的 model,并为其定义了三个字段:title(CharField)、created_at(DateTimeField)、updated_at(DateTimeField)。其中 auto_now_add=True 表示在首次创建条目时,Django 会将当前时间自动写入到 created_at 字段中;而 auto_now=True 表示当条目更新时,Django 会将当前时间自动写入到 updated_at 字段中。

2. 在视图中操作时间字段

在 Django 中操作时间字段,需要在视图中导入 models 对应的模型,然后通过模型对象来操作时间字段。例如,在视图中创建一篇文章并将其保存到数据库中的代码如下:

“`

from django.shortcuts import render

from .models import Article

def create_article(request):

article = Article(title=’Django Tutorial’)

article.save()

return render(request, ‘success.html’)

“`

上述代码调用了 Article 类的 save() 方法,并将 article 对象的 title 字段设置为 ‘Django Tutorial’。在调用 save() 方法时,Django 会为 article 对象中的 created_at、updated_at 字段自动填充当前时间。当视图被调用后,article 对象就会被保存到数据库中。

3. 在模板中操作时间字段

在模板中,我们可以通过模型对象的时间字段来渲染出对应的时间。一个典型的例子,就是在文章列表中,我们需要展示每篇文章的发布时间,代码如下:

“`

{% for article in article_list %}

{{article.title}}

发布时间:{{article.created_at|date:”Y-m-d H:i:s”}}

{% endfor %}

“`

上述代码中,我们使用了 date 模板过滤器,其作用是将 created_at 字段中的时间格式化为”Y-m-d H:i:s” 的字符串,并输出到页面上。

4. 时间字段的运算和格式化

Django 为开发者提供了一系列方便的 API,用于处理时间字段的运算和格式化。下面介绍几个常用的方法:

(1)在视图中格式化时间

Django 提供了 datetime 模块来处理时间类型。我们可以在视图里先获取当前时间,然后通过 strftime() 方法将其转化为指定格式的字符串,并传递给模板:

“`

from datetime import datetime

def get_current_time():

current_time = datetime.now()

formatted_time = current_time.strftime(“%Y-%m-%d %H:%M:%S”)

return formatted_time

def home(request):

current_time = get_current_time()

return render(request, ‘home.html’, {‘current_time’: current_time})

“`

在模板中,我们可以直接使用上述传递给模板的 formatted_time 变量来完成在模板中输出当前时间的操作:

“`

当前时间: {{current_time}}

“`

(2)计算时间差异

Django 还提供了一些 API,用于计算时间间隔和时间差异,比如 datetime.timedelta()。这个 API 提供了一个方便的方法,可以用来计算两个时间之间的差异。例如,如果我们想计算最后一次登录时间和当前时间之间的时间差异,代码如下:

“`

from django.utils import timezone

from datetime import timedelta

def calculate_time_difference(last_login):

current_time = timezone.now()

time_difference = current_time – last_login

return time_difference

def home(request):

user_last_login = request.user.last_login

time_difference = calculate_time_difference(user_last_login)

return render(request, ‘home.html’, {‘time_difference’: time_difference})

“`

在上述代码中,我们首先导入了 timezone 模块,并获取了当前时间。然后,我们通过计算从用户上次登录到当前的时间差异,并将其返回给视图。最终,我们传递 time_difference 变量给模板,用于展示用户离开网站的时间差。

(3)格式化时间输出

在模板中,我们可以使用 date 模板过滤器来格式化时间输出。例如,如果我们要把时间格式化为”YYYY-MM-DD”的形式:

“`

{{ article.created_at | date:”Y-m-d” }}

“`

除此之外,我们还可以使用 Django 内置的 l10n 库,将时间转化为用户的本地时区并渲染:

“`

{% load tz %}

{% localtime on %}

Released: {{ article.created_at }}

{% endlocaltime %}

“`

通过上述步骤,我们便可以在 Django 中常见的场景中存储、操作和渲染时间字段了。当然,如果您需要提供个性化的功能,也可以根据需要扩展相关特性。

相关问题拓展阅读:

如何独立使用django的数据库访问功能

1. 安装Django

view plain copy

cd Django-1.4

python setup.py install

2. 安装postgresql的客户端:

view plain copy

sudo apt-get install -y postgresql-client-9.1 python-psycopg2

3. 新建project:

view plain copy

django-admin.py startproject myproject

4. 在myproject下新建app:

view plain copy

python manage.py startapp myapp

4. 新增环境变量:

编辑/etc/profile文件,在末尾加入以下语句:

view plain copy

export PYTHONPATH=$PYTHONPATH:/home/yc/src/myproject

export DJANGO_SETTINGS_MODULE=myproject.settings

5.

假设数据库已经由Django的另一个应用(名称为otherapp)建好,数据库冲禅陵类型是postgresql,名称为mydb,位于

192.168.1.23。见好的数据库中有一个表,名称是otherapp_user,则将otherapp/models.py拷贝到myapp

/models.py。

注意检查models.py下的class user类的class Meta:部分,如果没有applabel标签,则要加上:app_label=’otherapp’

再修改/home/yc/src/myproject下的settings.py文件,如下散戚:

view plain copy

DATABASES = {

‘default’: {

‘ENGINE’: ‘django.db.backends.postgresql_psycopg2’, # Add ‘postgresql_psycopg2’, ‘mysql’, ‘sqlite3’ or ‘oracle’.

‘NAME’: ‘mydb’, # ‘vps2db_test1’ Or path to database file if using sqlite3.

‘USER’: ‘postgres’, # Not used with sqlite3.

‘PASSWORD’: ‘123’, # Not used with sqlite3.

‘HOST’: ‘192.168.1.23’, # Set to empty string for localhost. Not used with sqlite3.

‘PORT’: ‘5432’,# Set to empty string for default. Not used with sqlite3.

}

}

view plain copy

INSTALLED_APPS = (

‘django.contrib.auth’,

‘django.contrib.contenttypes’,

‘django.contrib.sessions’,

‘django.contrib.sites’,

‘django.contrib.messages’,

‘django.contrib.staticfiles’,

‘袭仿myapp’,

)

6. 在myapp目录下编写测试程序

view plain copy

from models import user

if __name__==”__main__”:

try:

u = user.objects.get(id=user_id)

except user.DoesNotExist:

print “user not exist)

return None

else:

django怎么使用本机mysql数据库

step 1:

修改你的django project目录下的settings.py 文件至如下所示:

其中,’NAME’ 对应的 ‘db_name’ 是你事先使用mysql

的命令行提示符创建的数据库名称。注意:在django使用数据库之前,你必须先创建出数据库,否则会报错凳蠢薯。’USER’对应的’username’

还有 ‘PASSWORD’ 对应的‘passwd’

就是你在mysql中创建的用户名和密码。如果你有多个的话,随便填一个就好。’HOST’和’PORT’默认都可以不填。

题外话: 使用用户名和密码登录mysql的方法:

首先,你需要进入 mysql/bin的目档瞎录下,也可以在.bash_profile中设置环境变量:

PATH=/usr/local/bin:/usr/bin:/bin:/in:/usr/in:/usr/local/in:/usr/local/Cellar/mysql/5.6.22/bin/

再在prompt输入 mysql -u username -p, 回车后再枣者输入 passwd即可

step 2:

然后,在manage.py路径中使用python manage.py syncdb 试试,结果会提示你错误找不到 MySQLdb 这个module, 为什么呢, 因为 python manage.py syncdb 命令是这样工作的:

1. 在project目录的settings.py的INSTALLED_APPS元组中找到可能需要更新的APP。

2. 找到每一个APP目录中的models.py (关系定义文件),并针对变化在数据库中进行更新。

说了这么多,前面那个错误 找不到 module MySQLdb 是什么意思啊 ?

先给个图,再解释:

因为在models.py中定义关系使用的是python,而真正在数据库中操作形成model当然一定要用sql语句,所以必须要有一些功能模块

来把python语句转化成sql语句。如果你使用sqlite的话,由于sqlite和转化模块都已经由python内置了,所以直接使用不会发生错

误。但是 ”mysql语句的转化模块“ 就需要你手动加载了,这些模块放在 MySQL-python 中。

我是使用pip 安装的:

安装了之后,再使用 python manage.py syncdb就OK啦。

我使用的系统是 OS X,下面是 mysql 默认的安装路径

/usr/local/Cellar/mysql/5.6.22/

如果你想知道你的数据库文件是放在哪里的,你可以查看mysql_config文件中的ldata变量,这个变量的值就是 默认的数据库文件夹存储的路径。 我的系统中,mysql_config的完整路径是 :

/usr/local/Cellar/mysql/5.6.22/bin/mysql_config

关于django 数据库 时间的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » Django 中操作数据库存储时间的技巧 (django 数据库 时间)