python django框架写的登录 图片验证码 生成图片和随机字母写到图片上 图片放入内存中
url中
path('image/code/', views_account.image_code),
views中
class LoginFrom(BootStrapForm):
username = forms.CharField(
label="用户名",
widget=forms.TextInput,
required=True
)
password = forms.CharField(
label="密码",
widget=forms.PasswordInput(render_value=True),
required=True
)
code = forms.CharField(
label="验证码",
widget=forms.TextInput,
required=True
)
def clean_password(self):
pwd = self.cleaned_data.get("password")
return md5(pwd)
def login(request):
""" 登录 """
image_code(request)
if request.method == "GET":
#image_code(request)
form = LoginFrom()
return render(request, "login.html", {"form":form})
form = LoginFrom(data=request.POST)
if form.is_valid():
#验证成功,获取到的用户名和密码及验证码
#验证码效验
user_input_code = form.cleaned_data.pop('code')
code = request.session.get('image_code',"")
if code.upper() != user_input_code.upper():
form.add_error("code", "验证码错误")
return render(request, 'login.html', {'form': form})
#验证通过去数据库效验用户名和密码是否正确
admin_obj = models.Admin.objects.filter(**form.cleaned_data).first()
if not admin_obj:
#如果用户名 密码错误
form.add_error("username","用户名密码错误")
return render(request, "login.html", {"form":form})
#用户名 密码正确
#网站生成随机字符串;写到用户浏览器的cookie中;在写入到session中
userinfo = {'id':admin_obj.id,'name':admin_obj.username}
request.session["info"] = userinfo
#session可以保存 7天
request.session.set_expiry(60 * 60 * 24 * 7)
return redirect("/admin/list")
return render(request, "login.html", {"form":form})
def logout(request):
""" 注 销 """
request.session.clear()
return redirect("/login/")
def image_code(request):
print("进入image_code")
""" 生成图片验证码 """
#调用pillow函数生成图片
#1、先导包 from webapp.utils.code import check_code
# from io import BytesIO
img,code_string = check_code()
#将 code写入到session中,以便于后续进行验证
request.session['image_code'] = code_string
#给验证码设置有效时间60S
request.session.set_expiry(60)
print(code_string)
#在内存中创建一个文件seream
stream = BytesIO()
#将img写到这个内存文件中png格式
img.save(stream,'png')
# 再从内存中 返回这个文件
return HttpResponse(stream.getvalue())
HTML中
"form-group">
"row">
"col-xs-7">
{{ form.code }}
"color: red;">{{ form.code.errors.0 }}
"col-xs-5">
"/image/code" style="width: 125px" id="image_code" >
验证码不显示
想正常显示验证码有知道的朋友能指点 指点吗