python獨立指令碼應用Django專案的環境

2023-08-24 21:00:19

一、需求說明

  一直用 Django 在開發一個網站專案,其中的註冊使用者和登入,都是使用Django自帶的認證系統。主要是對密碼的加密,在註冊或者登入的時候,前端傳遞多來的密碼,我會使用Django的set_password()方法在加密一次

    

  經過加密後的資料庫中的資料樣子如下:

    

  現在我有另外一個需求,需要單獨寫一個指令碼,獨立於這個Django專案,要實現的功能,就是在通過我單獨寫的python3,讓使用者通過這個指令碼可以快讀的建立Django專案中的使用者。其實需求很簡單,就是通過python指令碼,往Django資料庫中寫入資料而已,但是有一個困難點,就是密碼要借用Django中的環境,不是說自己按照django的加密規則,自己加密就行了,因為這個加密的過程中,使用到Django專案中settings中的加鹽引數,所以必須還要獲取Django專案的執行環境。

 

二、原始碼解釋

  為什麼我使用的set_password(), 加密之後就必須要獲取原來Django專案的環境呢?我們看一下原始碼就明白了了

    

   在set_password()函數內部有呼叫了make_password()函數,我們繼續看原始碼

    

   因為在註冊的時候的密碼有加鹽,登入的時候,需要同樣的加鹽規則,所以這裡我在註冊賬號和密碼的時候,需要使用Django專案中的這個環境

 

三、獨立指令碼參照Django環境

  1、import django

  2、import os

  3、將專案路徑新增到系統路徑下

# 將專案目錄新增到系統路徑下
sys.path.append('/home/root/projects/mcloud/src/backend')

  說明:我的專案路徑就是:/home/root/projects/mcloud/src/backend,各位替換成自己的路徑即可

    

  4、將Django專案中的settings檔案新增到環境變數中

os.environ['DJANGO_SETTINGS_MODULE'] = "mcloud.settings"

  5、django 啟動

django.setup()

 

四、案例

  1、匯入需要的django模組

from django.contrib.auth import authenticate
from django.contrib.auth.hashers import make_password

  2、使用Django 環境建立我需要的密碼

 password = make_password(input_password)

  3、在使用這個密碼就可以寫入資料庫,正常登入了。

 

五、拋轉引玉

  我這裡只是一個python指令碼使用Django環境的案例,萬變不離其宗,主要就是

  1、將Django專案路徑加入到系統環境,方便指令碼找到專案的路徑

  2、將Django專案中的settings檔案新增到環境變數中

  3、django.setup()