Django筆記四十之執行Django環境的python指令碼

XHunter發表於2023-05-12

本文首發於微信公眾號:Hunter後端

原文連結:Django筆記四十之執行Django環境的python指令碼

這一篇筆記介紹如何在 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())

如果想獲取更多後端相關文章,可掃碼關注閱讀:
image.png

相關文章