一直用 Django 在開發一個網站專案,其中的註冊使用者和登入,都是使用Django自帶的認證系統。主要是對密碼的加密,在註冊或者登入的時候,前端傳遞多來的密碼,我會使用Django的set_password()方法在加密一次
經過加密後的資料庫中的資料樣子如下:
現在我有另外一個需求,需要單獨寫一個指令碼,獨立於這個Django專案,要實現的功能,就是在通過我單獨寫的python3,讓使用者通過這個指令碼可以快讀的建立Django專案中的使用者。其實需求很簡單,就是通過python指令碼,往Django資料庫中寫入資料而已,但是有一個困難點,就是密碼要借用Django中的環境,不是說自己按照django的加密規則,自己加密就行了,因為這個加密的過程中,使用到Django專案中settings中的加鹽引數,所以必須還要獲取Django專案的執行環境。
為什麼我使用的set_password(), 加密之後就必須要獲取原來Django專案的環境呢?我們看一下原始碼就明白了了
在set_password()函數內部有呼叫了make_password()函數,我們繼續看原始碼
因為在註冊的時候的密碼有加鹽,登入的時候,需要同樣的加鹽規則,所以這裡我在註冊賬號和密碼的時候,需要使用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()