一、图片验证码生成
转base64在前端无法显示问题
def imgCode(request):
stream = BytesIO() # 开辟一块内存空间,不用写在外存,减少读写操作
img, code = create_validate_code()
img.save(stream, "PNG")
request.session["CheckCode"] = code
binary_data = stream.getvalue()
base64_data = base64.b64encode(binary_data) # 还是一个bypt ,会多b''把数据包起来
base64_data_str = str(base64_data)
res = "data:image/jpg;base64,%s" % (base64_data_str[2:-1])#去除b''的包裹,这样才能在前台显示
data = {"msg": "ok", "code": 0, "res": res}
return HttpResponse(json.dumps(data))
二、ajxa请求Content-Type问题,使用axios是默认application/json;charset=UTF-8,故需要引入qs参数格式化包,,$.ajax,不需要
def login(request):
# axios 传过来的数据,默认是json(Content-Type: application/json;charset=UTF-8)request.POST是空的QueryDict:{},原始的byte类型字符都在request.body中,通过request.body.decode()转成json字符串,在json.loads解码下
if request.method == "POST":
print(request.POST)
params = json.loads(request.body.decode())
name = params.get("name")
password = params.get("password")
res = models.User.objects.filter(Q(name=name) and Q(password=password))
if res:
data = {"msg": "登录成功", "code": 0, "res": ""}
else:
data = {"msg": "用户名密码不正确", "code": 1, "res": ""}
return HttpResponse(json.dumps(data))
else:
return render(request, "web/login.html")