一、验证码
准备工作分别需要两个文集一个是check_code.py
文件,一个是Monaco.ttf
字体文件
验证码的思路,利用html
的src
属性直接可以读取对应的连接展示在页面上,所以单独把验证码写成一个连接请求用来返回
-
引入BytesIO 将验证码图片保存在内存环境,这样就不需要实体化的目录文件
-
request.session['CheckCode'] = code 将验证码对应的键值对保存在session中
from io import BytesIO
#验证码
def check_code(request):
stream = BytesIO()
img,code = create_validate_code()
img.save(stream,'PNG')
request.session['CheckCode'] = code
return HttpResponse(stream.getvalue())
二 、思路
-
页面get请求的时候我们将formfanh
-
post 请求时先设置好ajax 钥匙
-
login_obj.is_valid() 用来判断是否符合我们设置
-
如果符合我们给我们的钥匙重新赋值
-
如果不符合,我们先判断在错误信息中是否存在check_code,也就是验证码的错误信息这个和form字段一一对应,有就是验证码错误,没有就是密码错误
def Login(request):
if request.method == "GET":
login_obj = account.loginform(request)
return render(request,"login.html",{'login_obj':login_obj})
elif request.method == "POST":
ret = {'status':False,'message':None}
login_obj = account.loginform(request,request.POST)
if login_obj.is_valid():
ret['status'] = True
else:
#判断错误信息
if "check_code" in login_obj.errors:
ret['message'] = '验证码错误'
else:
ret['message'] = '用户名密码错误'
return HttpResponse(json.dumps(ret))
网友评论