1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Django登录验证码实现

Django登录验证码实现

时间:2019-06-05 01:51:37

相关推荐

Django登录验证码实现

登录验证码实现

只实现验证码功能,没有样式。后续验证码替换可改为ajax请求,实现局部刷新。

路由代码:

from django.contrib import adminfrom django.urls import pathfrom app01 import viewsurlpatterns = [path('admin/', admin.site.urls),path('login/', views.login), #登录接口path('update_yanzheng/', views.update_yanzheng),#验证码替换]

视图代码:

# 验证码的实现from PIL import Image, ImageDraw, ImageFontimport randomfrom io import BytesIO, StringIOfrom django.shortcuts import HttpResponse,render,redirect# 获取随机的样式颜色def get_random():return random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)def get_code(request):img_obj = Image.new('RGB', (350, 30), get_random()) # 生成图片对象img_draw = ImageDraw.Draw(img_obj) # 生成了一个画笔对象img_font = ImageFont.truetype('static/font/sylfaen.ttf', 30) # 字体样式# 随机码的获取:code = ''for i in range(5):upper_str = chr(random.randint(65, 90)) # ascii码 大写字母lower_str = chr(random.randint(97, 122)) # ascii码 小写字母random_int = str(random.randint(0, 9))tmp = random.choice([upper_str, lower_str, random_int]) # 随机取值img_draw.text((i * 60 + 60, 0), tmp, get_random(), img_font) # 文字展示到图片上code += tmp # 一次结果print(code)request.session['code'] = code # 存储io_obj = BytesIO() # 内存内存储,读取img_obj.save('static/img/yanzheng.png', 'png') # 保存,并选定格式return codecode = Nonedef login(request):global codeif request.method == 'GET':code = get_code(request)return render(request, 'login.html')else:user = request.POST.get('user')pwd = request.POST.get('pwd')yanzheng = request.POST.get('yanzheng')print(user,pwd,yanzheng)if user=='root' and pwd=='root' and yanzheng==code:return redirect('')else:return render(request, 'login.html','登录失败')def update_yanzheng(request):global codecode = get_code(request)return render(request, 'login.html')

前端超文本内容:

下面展示一些内联代码片

<form method="POST" action="/login"><p>用户名:<input type="text" name="user"></p><p>密码:<input type="text" name="pwd"></p><p>验证码:<input type="text" name="yanzheng"><img src="/static/img/yanzheng.png"><a href="/update_yanzheng">看不清</a></p><input type="submit" value="登录"></form>

结果展示:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。