一、驗(yàn)證碼
準(zhǔn)備工作分別需要兩個文集一個是check_code.py文件,一個是Monaco.ttf字體文件
驗(yàn)證碼的思路,利用html的src屬性直接可以讀取對應(yīng)的連接展示在頁面上,所以單獨(dú)把驗(yàn)證碼寫成一個連接請求用來返回
-
引入BytesIO 將驗(yàn)證碼圖片保存在內(nèi)存環(huán)境,這樣就不需要實(shí)體化的目錄文件
-
request.session['CheckCode'] = code 將驗(yàn)證碼對應(yīng)的鍵值對保存在session中
from io import BytesIO
#驗(yàn)證碼
def check_code(request):
stream = BytesIO()
img,code = create_validate_code()
img.save(stream,'PNG')
request.session['CheckCode'] = code
return HttpResponse(stream.getvalue())
二、注冊的邏輯
-
頁面請求首先是get方法,我們把我們的寫好的form返回到頁面
-
psot請求的時候采用ajax時,要提前寫好封裝的字典用來保存
-
is_valid() 是用來判斷字段是否通過了form的過濾
-
cleaned_data 是用來接受判斷通過的字典
-
如果沒有通過第三步
- 那么所有的錯誤信息都封裝在
obj_regiser = account.accountform(request,request.POST)
def register(request):
if request.method == "GET":
obj_regiser = account.accountform(request)
return render(request,'register.html',{'obj_register':obj_regiser})
elif request.method == "POST":
ret = {'status':True,'message':None}
obj_regiser = account.accountform(request,request.POST,request.FILES)
if obj_regiser.is_valid():
UserDate = obj_regiser.cleaned_data
models.UserInfo.objects.create(
username = UserDate['username'],
password = UserDate['password'],
nickname = UserDate['nickname'],
email = UserDate['email'],
)
else:
ret['status'] = False
ret['message'] = obj_regiser.errors
return HttpResponse(json.dumps(ret))