验证码生成案例

先创建static文件夹与项目工程App为兄弟关系,

在static里面创建 uploadefiles文件夹(随意起名)

再在uploadefiles里面创建一个文件夹 放一种书写字体,

settings配置:

MEDIA_ROOT=os.path.join(BASE_DIR,r'static/uploadefiles')
# 这里的uploadefiles是与之前起名的文件夹相对应

urls配置:

url(r'^uerslogin/', views.uerslogin),
    url(r'^douserlogin/', views.douserlogin),
    url(r'^getverifycode/', views.getverifycode),

views视图层配置:

def uerslogin(request):
​
    return render(request,"userlogin.html")
​
​
def make_color(): # 创建颜色(R,G,B)
    red = random.randrange(255)
    green = random.randrange(255)
    blue = random.randrange(255)
    return (red, green, blue)
​
​
def make_point(): #创建点(weight,height)
    weight = random.randrange(100)
    height = random.randrange(50)
    return (weight, height)
​
​
def getverifycode(request):
    # 创建画布
    size = (100, 50)
    color = make_color()
    image = Image.new("RGB", size, color)
​
    # 创建画笔
    imagedraw = ImageDraw.Draw(image, "RGB")
​
    # 记载字体
    imagefont = ImageFont.truetype("/home/xxx/PycharmProjects/day07/static/fonts/ADOBEARABIC-BOLD.OTF", 30)
​
    # 做一个源文件
    source = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0123456789"
​
    # 随机从source中取4个数据出来添加到verify
    verify = ''
    for i in range(4):
        verify += source[random.randrange(len(source))]
​
    request.session["verify_code"] = verify
​
    # 每一次循环,都去玩过图片上写一个verify中的一个元素
    for item in range(4):
        imagedraw.text((20 + item * 20, 10), verify[item], fill=make_color(), font=imagefont)
​
    for item in range(500):
        imagedraw.point(make_point(), fill=make_color())
​
    import io
    # 创造一个字节流的
    buf = io.BytesIO()
    # 将图片保存在IO流的缓冲区
    image.save(buf, 'png')
​
    # 通过响应返回IO流中的值
    return HttpResponse(buf.getvalue(), 'image/png')
​
def douserlogin(request):
    # 这个是表单提交上来的验证码
    verify = request.POST.get('username')
    # 这个是session给咱们的验证码
    verify_code = request.session.get("verify_code")
​
    if verify == verify_code:
        return HttpResponse("验证成功")
    return HttpResponse("验证码错误")

templates模板层配置渲染:

<form action="/App/douserlogin/" method="post">
​
    {% csrf_token %}
    <span>验证码:</span><input type="text" name="username" placeholder="请输入验证码">
    <br>
    <img id="verify_code"  src="/App/getverifycode/" alt="验证码" width="200px" height="100px">
​
    <br>
​
    <button>登录</button>
​
</form>

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值