本文首發於微信公眾號:Hunter後端
這一篇筆記介紹如何在 Django 中執行指令碼。
假設說我們要實現一個功能,需要獲取 blog.models.Blog 這張表裡的總數且使用 print() 輸出。
如果程式碼邏輯很短,且是一次性執行的操作,我們可以在系統的根目錄下使用 python3 manage.py shell
在 shell 中操作實現。
from blog.models import Blog
print(Blog.objects.all().count())
但是如果這個需求是一個很長的邏輯,且需要可以重複執行,那麼應該如何操作呢?
首先,我們需要可以用到 Django 裡的 Blog model,然後使用 model 的方式來進行查詢。
我們可以將其寫入一個檔案,每次都使用 shell 來呼叫。
寫入檔案,在 shell 呼叫
比如,我們可以在 blog 建立一個 scripts 資料夾,然後建立一個 blog_script.py 檔案:
# blog/scripts/blog_script.py
from blog.models import Blog
def get_blog_count():
print(Blog.objects.all().count())
然後每次呼叫的時候就進入 python3 manage.py shell
操作:
from blog.scripts.blog_script import get_blog_count
get_blog_count()
直接執行指令碼
如果我們想建立一個檔案,然後直接執行該指令碼,那麼就需要在指令碼中引入當前 Django 系統環境的一些引數和變數,可以直接在系統根目錄下建立一個 blog_script.py 檔案:
# blog_script.py
import django, os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "hunter.settings")
django.setup()
from blog.models import Blog
if __name__ == "__main__":
print(Blog.objects.count())
然後我們在系統根目錄下直接執行該指令碼:
python3 blog_script.py
這個檔案目前只有放在系統的根目錄下才可以執行,但是如果太多的指令碼都放到系統根目錄下也不太好,所以我們如果有這種指令碼一般都可以放到對應的 application 的 scripts 資料夾下。
如果我們想要直接在 blog/scripts/ 下直接執行該指令碼的話,則需要在我們的指令碼中新增 Django 系統的路徑,假設我們的 Django 系統名為 hunter,在伺服器的路徑為:/Users/xxxx/hunter/
,我們可以如下操作:
# blog/scripts/
import django, os, sys
django_path = "/Users/xxxx/hunter/"
sys.path.extend([django_path])
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "hunter.settings")
django.setup()
from blog.models import Blog
if __name__ == "__main__":
print(Blog.objects.count())
如果想獲取更多後端相關文章,可掃碼關注閱讀: