django 中驗證碼登入驗證的實現
阿新 • • 發佈:2019-02-05
django中有關於登入驗證的第三方模組,大家可以自己去搜搜,這裡說一下自定義驗證碼登入的情況(可以參考http://www.cnblogs.com/alex3714/articles/6662365.html這篇文章)。
我們生成的驗證碼圖片在傳送給html前要先存放,可以有兩種地方:
1.記憶體中,我們開發環境下時可以這樣用,但是在生產時最好別這樣,因為訪問量太高的話,你記憶體就等著爆吧;
2.static(靜態檔案)中,並且可以設定在用了登入成功後可以立即刪除掉圖片,節省開銷。
至於具體的實現過程,可以看上面的文章,不過有幾個細節作者沒有說清楚,我是根據我自己的情況將它完善了。
1.表單
<form2.setting.py儲存路徑設定action="/code/checkcode/" method="post"> {% csrf_token %} <div class="form-group"> <div class="input-group"> <div class="input-group-addon"> <img height="30px" src="/static/image/{{ today_str }}/{{ filename }}.png" /> </div> <inputstyle="height: 50px" type="text" name="verify_code" class="form-control" placeholder="驗證碼"> <input type="submit" name="verify_code_key" value="submit" > </div> </div> </form>
VERIFICATION_CODE_IMGS_DIR = 'E:\web project\web\webchat\static\image'
3.登入和驗證
def acc_login(request): today_str = datetime.date.today().strftime("%Y%m%d") verify_code_img_path = "%s/%s" %(settings.VERIFICATION_CODE_IMGS_DIR, today_str) if not os.path.isdir(verify_code_img_path): os.makedirs(verify_code_img_path,exist_ok=True) print("session:", request.session.session_key) random_filename = "".join(random.sample(string.ascii_lowercase,4)) random_code = verify_code.gene_code(verify_code_img_path,random_filename) cache.set('my_code', random_code,30) return render(request, 'login.html', {"filename": random_filename, "today_str": today_str}) def checkcode(request): err_msg = '' if request.method == "POST": _verify_code = request.POST.get('verify_code') if cache.get('my_code') == _verify_code: err_msg = 'successful' else: err_msg = "error!" return render(request, 'test.html', {'error': err_msg})4.最後驗證碼圖片可以自己設定刪除,節省開銷,很簡單的,就不寫了。