django|python中图形验证码的实现

作者 : admin 于 2010-03-23 14:01:08
2010
03-23

python自己并没有带图型库,需要借助第三方的图形库来实现。原来习惯的就是php下的gd库,但网上搜索后普遍说gd的python接口不好用,又考虑php也即将抛弃dg,就选择了很多人推荐的 PIL(python image library) 库。

首先是安装此库,http://www.pythonware.com/products/pil/index.htm

选择自己相应版本和平台进行安装,安装文档写的还算清楚。

然后是代码实现:

  1. import Image, ImageDraw, ImageFont, md5, random,cStringIO,util
  2. def show(request):
  3.     im = Image.new('RGBA',(52,18),(50,50,50,50))
  4.     draw = ImageDraw.Draw(im)
  5.     rands = util.rand(4)  //自己写的一个取随机字符串的函数
  6.     draw.text((2,0), rands[0], font=ImageFont.truetype("tahomabd.TTF", random.randrange(12,18)), fill='white')
  7.     draw.text((14,0), rands[1], font=ImageFont.truetype("tahomabd.TTF", random.randrange(12,18)), fill='yellow')
  8.     draw.text((27,0), rands[2], font=ImageFont.truetype("tahomabd.TTF", random.randrange(12,18)), fill='yellow')
  9.     draw.text((40,0), rands[3], font=ImageFont.truetype("tahomabd.TTF", random.randrange(12,18)), fill='white') 
  10.     del draw
  11.     request.session['checkcode'] = rands
  12.     buf = cStringIO.StringIO()
  13.     im.save(buf, 'gif')
  14.     return HttpResponse(buf.getvalue(),'image/gif')

修改urls.py文件

  1. #check code
  2.     (r'^checkcode/','view.checkcode.show'),

再访问 http://127.0.0.1/checkcode/ 既可看到效果。

官方的手册写的比较惨,属于找什么没什么。顺便把网上找到的一个写的不错的文档传送来:http://nadiana.com/pil-tutorial-basic-advanced-drawing

评论 2

  1. 墨水 Says:

    参见我做的实例:http://www.2maomao.com/blog/django-newform-captcha/

  2. Forrest Says:

    md5是干什么用的呀???

发表评论




XHTML:你可以使用的标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

(若看不到验证码,请重新加载页面。)