利用Pillow,几行代码实现的最简单的Django页面验证码功能

验证码本质上就是生成带有文字的图片,用来区分人与机器的行为。如果考虑到防止破解自然会涉及到许多复杂的算法,用以防止从图片中容易地识别出文字,但作为一个简单的例子,我们就使用最简单的方法来达成一个验证码的功能。以下就是利用Python的第三方图形处理模块Pillow来实现的一个简单的验证码功能:

首先,在accounts.views中定义一个生成验证码的函数:

from PIL import Image, ImageDraw, ImageFont
from django.http.response import HttpResponse
from settings import BASE_DIR
import cStringIO, string, os, random

def captcha(request):
    '''Captcha'''
    image = Image.new('RGB', (147, 49), color = (255, 255, 255)) # model, size, background color
    font_file = os.path.join(BASE_DIR, 'static/fonts/ARIAL.TTF') # choose a font file
    font = ImageFont.truetype(font_file, 47) # the font object
    draw = ImageDraw.Draw(image)
    rand_str = ''.join(random.sample(string.letters + string.digits, 4)) # The random string
    draw.text((7, 0), rand_str, fill=(0, 0, 0), font=font) # position, content, color, font
    del draw
    request.session['captcha'] = rand_str.lower() # store the content in Django's session store
    buf = cStringIO.StringIO() # a memory buffer used to store the generated image
    image.save(buf, 'jpeg')
    return HttpResponse(buf.getvalue(), 'image/jpeg') # return the image data stream as image/jpeg format, browser will treat it as an image

接下来,在项目的urls.py中,做好url映射即可:

urlpatterns += patterns('accounts.views',
    url(r'^accounts/captcha/$', 'captcha'),
    ...
)

在模板中的使用,也非常直观:

	<div class="form-group">
		<img onclick="this.setAttribute('src','/accounts/captcha/?nocache='+Math.random());" src="/accounts/captcha/" alt="Captcha"/>
	</div>

这样就能在页面上显示出相应的验证码图片。这样,通过用户在提交表单之前,输入的图片中的内容,在请求到达服务器之后,与其当前session中的内容比对,就可以判断用户是否输入了正确的验证码,继而进行相应的处理。

以上验证码图片的生成需要用到第三方的Pillow模块,可以通过 pip install Pillow来安装,在这个过程中可能需要安装一些系统共享库来支持某些类型的图片格式,如果编译出现问题,在编译过程中都会有体现。

时间: 2024-08-08 13:10:59

利用Pillow,几行代码实现的最简单的Django页面验证码功能的相关文章

初学者利用git 上传代码到Coding的简单操作步骤

初学者利用git 上传代码到Coding的简单操作步骤 1.首先登陆coding网站注册账号https://coding.net/ (注册完后需登陆邮箱激活邮件) 2.登陆刚注册的coding账号 ,添加项目 添加项目-〉输入项目名称-〉输入对项目的简单描述---〉选择"公开"-〉创建项目 到此为止,后面需要将本次实验内容push到该项目chap1下. 此处,需要记录http://git.coding.net/gdcs16_000/chap1.git   (gdcs16_000为你的注

几行代码为自己的网站添加划词翻译功能

为网站添加自动翻译网页.网页划词.在线翻译.在线词典.每日一句功能. 适合各类网站 百变语种,自动翻译网页 把中文的网站,变成十几种不同语种的网站,会不会感觉很新奇? 要实现自动翻译网站上文字的功能,看似很困难,但是通过,百度,Google的翻译小工具实现起来就非常简单.只要添加一段网页源代码,就可以翻译多种语种的网页,让其他国家的用户也能看懂你的网站. 说简单,那是真简单--将以下代码加入网站合适位置,就可以实现网页的多语种翻译了. 如果使用的是CMS网站管理系统,如joomla,phpwin

几行代码搞定java生成解析二维码功能

最近公司要求扫描二维码和生成二维码的功能.而群里部分网友也提到了.我这里就写了一个demo,和大家分享.代码很简介,希望大家能够喜欢. 网友表示在网上搜索了很多,发现不是代码不全,就是jar不匹配. 我这里共享了一个zxing的2.2版本的例子,也提供了下载地址.实现代码如下: package com.herman.test; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExcep

利用Git 上传代码到Coding的简单操作步骤及一些错误总结

今天看到git可以上传代码到coding.net,感觉还是不错的,于是自己动手上传了一次,在期间发现了很多的问题,在这里总结一下,希望能帮到未上传成功的程序员们! 1:先自己注册coding.net账号! 2.安装git 客户端 先安装Git软件:Git for Windows下载. 安装过程中的详细说明可参考: https://jingyan.baidu.com/article/9f7e7ec0b17cac6f2815548d.html 3.创建本地git 仓库 现在本地创建一个文件夹,例如:

一个程序猿可以控制多少行代码

 我认为大家初看到这个题目时,一定会非常奇怪,一个程序猿可以控制多少行代码全然取决于该程序猿的能力强弱,这有什么规律可循么?事实上当这个想法突然冒出来时,我也都有些诧异. 首先介绍一下我遇到的情况,我当时正在编写一个小程序,是模拟cache工作原理的.这个程序中有一个函数集的实现文件(function.cpp),大概由20个左右的函数组成,由main.cpp中的main函数直接去调用它们.这个文件我是从头開始一点一点码起来的,開始时都非常顺利,编写代码的速度也非常平稳.可是当我的代码达到60

你相信么,只需一个函数5行JS代码即可在Javascript中实现完整的AOP功能

你相信么,只需一个函数5行JS代码即可在Javascript中实现完整的AOP功能, 你相信么,在JavaScript只需一个函数5行代码即可实现完整的面向方面AOP编程功能.这5行代码的功能包括: 无限层次的函数无害拦截 函数执行前拦截 检查函数的参数值 重新设定函数的参数值 函数执行后拦截 检查函数执行后的返回结果 重新设定函数的返回结果 虽然动态函数式语言的效率是一个存在的问题,但是对于它的高度灵活性,简直让人令人惊叹不已,剧赞. 这个小小的函数源自于和爱明兄的一次讨论:在javascri

用30行代码开发一个上传、下载文件的接口

分享一段代码,开发了3个接口: 1.上传文件 2.查看所有文件 3.下载文件 使用python开发,需要安装flask模块,使用pip install flask安装即可,代码量特别少,就能实现,加上注释总共35行代码,特别的简单,代码如下: import flask,os,time from flask import request,send_from_directory,jsonify app = flask.Flask(__name__)#创建一个app,代表这个web服务 @app.ro

利用shell脚本统计代码行数

刚毕业那会儿有一次去一家台湾公司面试,问我写过多少行代码.从没想过这个问题,粗略算了算,随口说道:大概几十万行吧.最近整理资料,看着eclipse左边满满的列表,想起了这个事.倒底总共有多少行代码?--这事如果在windows下要么找工具,要么编程序.又想到linux里的命令统计很方便,于是打算用个命令来完成.可分析来分析去,恐怕一行命令是搞不定的--又涉及递归查找,又涉及指定文件类型,又涉及对文件全路径进行操作.最终还是用了一段shell脚本才达到目的. #!/bin/bash declare

python爬虫实战:利用scrapy,短短50行代码下载整站短视频

近日,有朋友向我求助一件小事儿,他在一个短视频app上看到一个好玩儿的段子,想下载下来,可死活找不到下载的方法.这忙我得帮,少不得就抓包分析了一下这个app,找到了视频的下载链接,帮他解决了这个小问题. 因为这个事儿,勾起了我另一个念头,这不最近一直想把python爬虫方面的知识梳理梳理吗,干脆借机行事,正凑着短视频火热的势头,做一个短视频的爬虫好了,中间用到什么知识就理一理. 我喜欢把事情说得很直白,如果恰好有初入门的朋友想了解爬虫的技术,可以将就看看,或许对你的认识会有提升.如果有高手路过,