新聞中心
在開發(fā) Web 應(yīng)用程序時(shí),操作數(shù)據(jù)庫是非常常見的。而在 Django 中,要想操作數(shù)據(jù)庫,開發(fā)者需要使用 Django ORM(Object Relational Mapping) 來實(shí)現(xiàn)。而在進(jìn)行數(shù)據(jù)庫操作時(shí),時(shí)間的存儲和處理也是非常重要的一個(gè)方面,因?yàn)樵诤芏鄨鼍跋?,我們需要使用時(shí)間來做出一些個(gè)性化的業(yè)務(wù)邏輯。本文將介紹 Django 中操作數(shù)據(jù)庫存儲時(shí)間的相關(guān)技巧。

1. Django 中時(shí)間字段的定義
在 Django 中,時(shí)間字段一般是通過 models 中的 DateTimeField 來定義。這樣,Django 就能夠?qū)r(shí)間存儲在數(shù)據(jù)庫中。下面是定義時(shí)間字段的一個(gè)例子:
“`
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)
“`
上述代碼定義了一個(gè)名為 Article 的 model,并為其定義了三個(gè)字段:title(CharField)、created_at(DateTimeField)、updated_at(DateTimeField)。其中 auto_now_add=True 表示在首次創(chuàng)建條目時(shí),Django 會(huì)將當(dāng)前時(shí)間自動(dòng)寫入到 created_at 字段中;而 auto_now=True 表示當(dāng)條目更新時(shí),Django 會(huì)將當(dāng)前時(shí)間自動(dòng)寫入到 updated_at 字段中。
2. 在視圖中操作時(shí)間字段
在 Django 中操作時(shí)間字段,需要在視圖中導(dǎo)入 models 對應(yīng)的模型,然后通過模型對象來操作時(shí)間字段。例如,在視圖中創(chuàng)建一篇文章并將其保存到數(shù)據(jù)庫中的代碼如下:
“`
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’)
“`
上述代碼調(diào)用了 Article 類的 save() 方法,并將 article 對象的 title 字段設(shè)置為 ‘Django Tutorial’。在調(diào)用 save() 方法時(shí),Django 會(huì)為 article 對象中的 created_at、updated_at 字段自動(dòng)填充當(dāng)前時(shí)間。當(dāng)視圖被調(diào)用后,article 對象就會(huì)被保存到數(shù)據(jù)庫中。
3. 在模板中操作時(shí)間字段
在模板中,我們可以通過模型對象的時(shí)間字段來渲染出對應(yīng)的時(shí)間。一個(gè)典型的例子,就是在文章列表中,我們需要展示每篇文章的發(fā)布時(shí)間,代碼如下:
“`
{% for article in article_list %}
{{article.title}}
發(fā)布時(shí)間:{{article.created_at|date:”Y-m-d H:i:s”}}
{% endfor %}
“`
上述代碼中,我們使用了 date 模板過濾器,其作用是將 created_at 字段中的時(shí)間格式化為”Y-m-d H:i:s” 的字符串,并輸出到頁面上。
4. 時(shí)間字段的運(yùn)算和格式化
Django 為開發(fā)者提供了一系列方便的 API,用于處理時(shí)間字段的運(yùn)算和格式化。下面介紹幾個(gè)常用的方法:
(1)在視圖中格式化時(shí)間
Django 提供了 datetime 模塊來處理時(shí)間類型。我們可以在視圖里先獲取當(dāng)前時(shí)間,然后通過 strftime() 方法將其轉(zhuǎn)化為指定格式的字符串,并傳遞給模板:
“`
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 變量來完成在模板中輸出當(dāng)前時(shí)間的操作:
“`
當(dāng)前時(shí)間: {{current_time}}
“`
(2)計(jì)算時(shí)間差異
Django 還提供了一些 API,用于計(jì)算時(shí)間間隔和時(shí)間差異,比如 datetime.timedelta()。這個(gè) API 提供了一個(gè)方便的方法,可以用來計(jì)算兩個(gè)時(shí)間之間的差異。例如,如果我們想計(jì)算最后一次登錄時(shí)間和當(dāng)前時(shí)間之間的時(shí)間差異,代碼如下:
“`
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})
“`
在上述代碼中,我們首先導(dǎo)入了 timezone 模塊,并獲取了當(dāng)前時(shí)間。然后,我們通過計(jì)算從用戶上次登錄到當(dāng)前的時(shí)間差異,并將其返回給視圖。最終,我們傳遞 time_difference 變量給模板,用于展示用戶離開網(wǎng)站的時(shí)間差。
(3)格式化時(shí)間輸出
在模板中,我們可以使用 date 模板過濾器來格式化時(shí)間輸出。例如,如果我們要把時(shí)間格式化為”YYYY-MM-DD”的形式:
“`
{{ article.created_at | date:”Y-m-d” }}
“`
除此之外,我們還可以使用 Django 內(nèi)置的 l10n 庫,將時(shí)間轉(zhuǎn)化為用戶的本地時(shí)區(qū)并渲染:
“`
{% load tz %}
{% localtime on %}
Released: {{ article.created_at }}
{% endlocaltime %}
“`
通過上述步驟,我們便可以在 Django 中常見的場景中存儲、操作和渲染時(shí)間字段了。當(dāng)然,如果您需要提供個(gè)性化的功能,也可以根據(jù)需要擴(kuò)展相關(guān)特性。
相關(guān)問題拓展閱讀:
- 如何獨(dú)立使用django的數(shù)據(jù)庫訪問功能
- django怎么使用本機(jī)mysql數(shù)據(jù)庫
如何獨(dú)立使用django的數(shù)據(jù)庫訪問功能
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. 新增環(huán)境變量:
編輯/etc/profile文件,在末尾加入以下語句:
view plain copy
export PYTHONPATH=$PYTHONPATH:/home/yc/src/myproject
export DJANGO_SETTINGS_MODULE=myproject.settings
5.
假設(shè)數(shù)據(jù)庫已經(jīng)由Django的另一個(gè)應(yīng)用(名稱為otherapp)建好,數(shù)據(jù)庫沖禪陵類型是postgresql,名稱為mydb,位于
192.168.1.23。見好的數(shù)據(jù)庫中有一個(gè)表,名稱是otherapp_user,則將otherapp/models.py拷貝到myapp
/models.py。
注意檢查models.py下的class user類的class Meta:部分,如果沒有applabel標(biāo)簽,則要加上: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怎么使用本機(jī)mysql數(shù)據(jù)庫
step 1:
修改你的django project目錄下的settings.py 文件至如下所示:
其中,’NAME’ 對應(yīng)的 ‘db_name’ 是你事先使用mysql
的命令行提示符創(chuàng)建的數(shù)據(jù)庫名稱。注意:在django使用數(shù)據(jù)庫之前,你必須先創(chuàng)建出數(shù)據(jù)庫,否則會(huì)報(bào)錯(cuò)凳蠢薯?!疷SER’對應(yīng)的’username’
還有 ‘PASSWORD’ 對應(yīng)的‘passwd’
就是你在mysql中創(chuàng)建的用戶名和密碼。如果你有多個(gè)的話,隨便填一個(gè)就好。’HOST’和’PORT’默認(rèn)都可以不填。
題外話: 使用用戶名和密碼登錄mysql的方法:
首先,你需要進(jìn)入 mysql/bin的目檔瞎錄下,也可以在.bash_profile中設(shè)置環(huán)境變量:
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 試試,結(jié)果會(huì)提示你錯(cuò)誤找不到 MySQLdb 這個(gè)module, 為什么呢, 因?yàn)?python manage.py syncdb 命令是這樣工作的:
1. 在project目錄的settings.py的INSTALLED_APPS元組中找到可能需要更新的APP。
2. 找到每一個(gè)APP目錄中的models.py (關(guān)系定義文件),并針對變化在數(shù)據(jù)庫中進(jìn)行更新。
說了這么多,前面那個(gè)錯(cuò)誤 找不到 module MySQLdb 是什么意思啊 ?
先給個(gè)圖,再解釋:
因?yàn)樵趍odels.py中定義關(guān)系使用的是python,而真正在數(shù)據(jù)庫中操作形成model當(dāng)然一定要用sql語句,所以必須要有一些功能模塊
來把python語句轉(zhuǎn)化成sql語句。如果你使用sqlite的話,由于sqlite和轉(zhuǎn)化模塊都已經(jīng)由python內(nèi)置了,所以直接使用不會(huì)發(fā)生錯(cuò)
誤。但是 ”mysql語句的轉(zhuǎn)化模塊“ 就需要你手動(dòng)加載了,這些模塊放在 MySQL-python 中。
我是使用pip 安裝的:
安裝了之后,再使用 python manage.py syncdb就OK啦。
我使用的系統(tǒng)是 OS X,下面是 mysql 默認(rèn)的安裝路徑
/usr/local/Cellar/mysql/5.6.22/
如果你想知道你的數(shù)據(jù)庫文件是放在哪里的,你可以查看mysql_config文件中的ldata變量,這個(gè)變量的值就是 默認(rèn)的數(shù)據(jù)庫文件夾存儲的路徑。 我的系統(tǒng)中,mysql_config的完整路徑是 :
/usr/local/Cellar/mysql/5.6.22/bin/mysql_config
關(guān)于django 數(shù)據(jù)庫 時(shí)間的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都網(wǎng)站設(shè)計(jì)制作選創(chuàng)新互聯(lián),專業(yè)網(wǎng)站建設(shè)公司。
成都創(chuàng)新互聯(lián)10余年專注成都高端網(wǎng)站建設(shè)定制開發(fā)服務(wù),為客戶提供專業(yè)的成都網(wǎng)站制作,成都網(wǎng)頁設(shè)計(jì),成都網(wǎng)站設(shè)計(jì)服務(wù);成都創(chuàng)新互聯(lián)服務(wù)內(nèi)容包含成都網(wǎng)站建設(shè),小程序開發(fā),營銷網(wǎng)站建設(shè),網(wǎng)站改版,服務(wù)器托管租用等互聯(lián)網(wǎng)服務(wù)。
當(dāng)前名稱:Django 中操作數(shù)據(jù)庫存儲時(shí)間的技巧 (django 數(shù)據(jù)庫 時(shí)間)
文章路徑:http://m.fisionsoft.com.cn/article/cdspcge.html


咨詢
建站咨詢
