当前位置:   article > 正文

python生成验证码图片,点击图片的时候改变验证码_python获取验证码后变了

python获取验证码后变了

先看结果:进去之后验证码显示,再生成的时候我将验证码放在session中,到时候你去和页面输入的进行比较,点击验证码可以变换验证码。

 

生成验证码的代码:

  1. import random
  2. import io
  3. from PIL import ImageDraw
  4. from PIL import ImageFont
  5. import random
  6. from django.shortcuts import render
  7. from django.http import HttpResponse
  8. from PIL import Image
  9. # Create your views here.
  10. # 获取随机颜色
  11. def get_random_color():
  12. R = random.randrange(255)
  13. G = random.randrange(255)
  14. B = random.randrange(255)
  15. return (R, G, B)
  16. def get_verify_img(req):
  17. # 定义画布背景颜色
  18. bg_color = get_random_color()
  19. # 画布大小
  20. img_size = (130, 70)
  21. # 定义画布
  22. image = Image.new("RGB", img_size, bg_color)
  23. # 定义画笔
  24. draw = ImageDraw.Draw(image, "RGB")
  25. # 创建字体(字体的路径,服务器路径)
  26. font_path = 'C:/Windows/Fonts/ADOBEARABIC-BOLDITALIC.OTF'
  27. # 实例化字体,设置大小是30
  28. font = ImageFont.truetype(font_path, 30)
  29. # 准备画布上的字符集
  30. source = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0123456789"
  31. # 保存每次随机出来的字符
  32. code_str = ""
  33. for i in range(4):
  34. # 获取数字随机颜色
  35. text_color = get_random_color()
  36. # 获取随机数字 len
  37. tmp_num = random.randrange(len(source))
  38. # 获取随机字符 画布上的字符集
  39. random_str = source[tmp_num]
  40. # 将每次随机的字符保存(遍历) 随机四次
  41. code_str += random_str
  42. # 将字符画到画布上
  43. draw.text((10 + 30 * i, 20), random_str, text_color, font)
  44. # 记录给哪个请求发了什么验证码
  45. req.session['code'] = code_str
  46. # 使用画笔将文字画到画布上
  47. # draw.text((10, 20), "X", text_color, font)
  48. # draw.text((40, 20), "Q", text_color, font)
  49. # draw.text((60, 20), "W", text_color, font)
  50. # 获得一个缓存区
  51. buf = io.BytesIO()
  52. # 将图片保存到缓存区
  53. image.save(buf, 'png')
  54. # 将缓存区的内容返回给前端 .getvalue 是把缓存区的所有数据读取
  55. return HttpResponse(buf.getvalue(), 'image/png')

前端代码:

  1. <!DOCTYPE html>
  2. <meta name="referrer" content="no-referrer" />
  3. <html lang="en">
  4. <head>
  5. <meta charset="UTF-8">
  6. <title>登录</title>
  7. </head>
  8. <body>
  9. <div>
  10. 用户名:<input type="text" name="userName" id="username" value="{{ username }}">
  11. 密码: <input type="password" name="password" id="password" value="">
  12. 验证码: <input type="text" name="code" id="code" value=""> <img id="pic" style="height: 50px;margin-bottom: -8px;" src="/getCode">
  13. <input type="checkbox" name="remember" value="1">
  14. <input type="button" id="ajaxButton" value="登录">
  15. <a href="/toUpdatePwdPage" style="color: coral;">修改密码</a>
  16. </div>
  17. <div style="color: red;display: none;" id="message"></div>
  18. </body>
  19. <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.0.js"></script>
  20. <script type="text/javascript">
  21. {% comment %}点击的时候验证码发生改变,他需要加一个随机的变量才会再次访问后台生成图片{% endcomment %}
  22. $("#pic").click(function () {
  23. console.log('被执行了')
  24. $(this).attr("src", "/getCode"+ Math.random())
  25. })
  26. $(function () {
  27. $("#ajaxButton").click(function () {
  28. var username = $("#username").val();
  29. var password = $("#password").val();
  30. var code = $("#code").val();
  31. var chk_value =[];
  32. $('input[name="remember"]:checked').each(function(){
  33. chk_value.push($(this).val());
  34. });
  35. var remember='';
  36. if(null!=chk_value && chk_value.length>0){
  37. remember = chk_value[0]
  38. }
  39. $.ajax({
  40. url: "/login",
  41. type: "post",
  42. data: {'username':username, 'password':password,'remember':remember,'code':code},
  43. async:true,
  44. dataType: "json",
  45. success: function(data) {
  46. console.log(data)
  47. if(data.res == '1'){
  48. location.href ='/index/'+username
  49. }else if(data.res == '-1'){
  50. $("#message").show().text('验证码错误')
  51. }else{
  52. $("#message").show().text('用户名或密码错误')
  53. }
  54. }
  55. });
  56. })
  57. })
  58. </script>
  59. </html>
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/423715
推荐阅读
相关标签
  

闽ICP备14008679号