在外部 Python Script 使用 Django Module

使用 Django 開發網頁時,會把使用的 APP 與一些設定寫在 setting.py 這個設定檔內,程式執行的時候,會 import 設定檔內的東西。但如果寫了一隻不在 Django 專案裡的 Python Script,卻想要呼叫 Django 裡面的 module 時,就要自己做 import 的動作拉!

比如說我的 Django 目錄長這樣

Django_project/
 |
 |─ virtualenv/
 |─ project/
 |─ python_script.py

那麼外部的程式 python_script.py 就需要做以下的 import

sys.path.append(os.path.join(os.path.dirname(__file__), ‘project’))
os.environ.setdefault(“DJANGO_SETTINGS_MODULE”, “project.settings”)
from django.conf import settings

再舉個例子,筆者使用 Django Mail Queue 這個套件來寄信,信件的產生由一隻外部的程式在背景執行,因此除了要引入 django setting 外,還要將相關的 model 引入

import sys, os
sys.path.append(os.path.join(os.path.dirname(__file__), ‘project’))
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings")
from django.conf
import settings
from mailqueue.models
import MailerMessage

new_message = MailerMessage()
new_message.subject = "My Subject"
new_message.to_address = "example@gmail.com"
new_message.from_address = "example@gmail.com"
new_message.content = "Mail content"
new_message.html_content = "<h1>Mail Content</h1>"
new_message.app = "Name of your App that is sending the email."
new_message.save()

參考資料

Using Django models in external Python scripts

Jerry
Jerry

樂於分享的軟體工程師,曾在新創與大型科技公司實習,獲得黑客松競賽冠軍,擔任資安研討會講者。長期熱衷於資訊安全、雲端服務、網路行銷等領域,希望將科技知識分享給更多人。內容轉載請來信:jlee58tw@gmail.com

發表回應