当前位置: 首页 > 网络应用技术

如何在Django中添加验证代码

时间:2023-03-08 19:06:58 网络应用技术

  简介:许多朋友问有关如何在Django中添加验证代码的问题。首席执行官在本文中注明将为您提供详细的答案,以供所有人参考。我希望这对每个人都会有所帮助!让我们一起看看!

  本文目录清单:

  1.如何在批处理中提交验证代码2.带有返回render_to_response('bb.html',{'news'':buf.getValue()})的Django验证代码无法正常显示!3。Django的前端和后端完全分开。如何登录以验证当前网页。为了防止机器人提交表格,图片验证代码是非常普遍的响应手段之一。我不会在此处详细介绍它。我相信每个人都遇到了它。

  现在,将代码带有Python的PIL库,以实现验证代码的代码图片。代码中有详细的注释。

  #!/usr/bin/env Python

  #coding = UTF-8

  导入随机

  从PIL导入图像,ImageDraw,ImageFont,ImageFilter

  _letter_cases =“ abcdefghjkmnpqrstuvwxy”#<cretest Letters,删除可能的干扰I,L,O,Z

  _UPPER_CASE = _letter_cases.upper()#大_

  _numbers =''.join(Map(str,range(3,10)))#Datter

  init_chars =''.join((_ letter_cases,_upper_cases,_numbers))

  def create_validate_code(size =(120,30),

  chars = init_chars,

  img_type =“ gif”,

  模式=“ RGB”,

  bg_color =(255,255,255),

  fg_color =(0,0,255),

  font_size = 18,

  font_type =“ ae_alarabiya.ttf”,

  长度= 4,

  draw_lines = true,

  n_line =(1,2),

  draw_points = true,

  point_chaance = 2):

  '''

  @todo:生成验证代码图片

  @Param大小:图片的大小,格式(宽度,高度),默认(120,30)

  @param chars:允许的字符集,格式字符串

  @param img_type:图片保存的格式,默认值为gif,选项为gif,jpeg,tiff,png

  @param模式:图片模式,默认为RGB

  @param bg_color:背景颜色,默认为白色

  @param FG_Color:潜在颜色,验证代码字符颜色,默认为蓝色#0000FF

  @param font_size:验证代码字体大小

  @param font_type:验证代码字体,默认为ae_alalalabiya.ttf

  @param长度:验证代码字符编号

  @param draw_lines:是否转移线

  @param n_lines:干扰行的数量,格式元素组,默认值(1,2),只有draw_lines是有效的

  @param draw_points:是否绘制干扰点

  @Param Point_chance:干扰点的概率,大小范围[0,100]

  @return:[0]:pil图像实例

  @return:[1]:验证代码图片中的字符串

  '''

  宽度,高度=尺寸#宽,高度

  img = image.new(模式,大小,bg_color)#创建图形

  draw = imagedraw.draw(img)#创建刷子

  def get_chars():

  '''生成给定的长度字符串,返回列表格式''''

  返回率。样本(字符,长度)

  def create_lines():

  ''绘制干扰线'''

  line_num = random.randint(*n_line)#l l l l

  对于我的范围(line_num):

  # 初始点

  开始=(Random.Randint(0,size [0]),Random.Randint(0,size [1]))

  #结

  end =(random.randint(0,size [0]),random.randint(0,size [1]))

  draw.line([[begin,end],填充=(0,0,0,0))

  def create_points():

  ''绘制干扰点'''

  机会= min(100,最大(0,int(point_chance))))##c c C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C。

  对于xrange(宽度)中的w:

  对于Xrange(高度)中的H:

  tmp = random.randint(0,100)

  如果TMP 100 -Chance:

  draw.point((W,H),填充=(0,0,0))

  def create_strs():

  ''绘制验证代码字符''''

  c_chaars = get_chars()

  strs ='%s'%''.join(c_chars)#由每个字符之前和之后的空间分开

  font = imagefont.truetype(font_type,font_size)

  font_width,font_height = font.getSize(strs)

  draw.text((width -font_width) / 3,(高度-font_height) / 3),

  strs,font =字体,填充= fg_color)

  返回 '??'。加入(C_CHARS)

  如果draw_lines:

  create_lines()

  如果draw_points:

  create_points()

  strs = create_strs()

  #图形扭曲参数

  params = [1 -float(random.randint(1,2)) / 100,

  0,

  0,

  0,

  1 -float(Random.Randint(1,10)) / 100,

  float(Random.Randint(1,2)) / 500,

  0.001,

  float(Random.Randint(1,2)) / 500

  这是给予的

  img = img.transform(size,image.perspective,params)#创建失真

  img = img.filter(imagefilter.edge_enhance_more)#过滤器,边界增强(较大阈值)

  返回IMG,strs

  如果__name__ ==“ __ -main __”:

  code_img = create_validate_code()

  code_img.save(“ value.gif”,“ gif”)

  最终结果返回一个元组。第一个返回值是图像类的实例,第二个参数是图片中的字符串(是否正确)。

  最终结果返回一个元组。第一个返回值是图像类的实例,第二个参数是图片中的字符串(是否正确)。

  应该提醒的是,如果生成imageFont.TrueEyype实例时会引发IOERROR异常,则可能是计算机运行代码不包括指定的字体,需要下载和安装。

  生成代码的身份验证代码的效果:

  目前,仔细的同学可能会问,如果生成了验证代码,则必须先保存生成的图片,然后显示页面。这是不可接受的。这次,我们需要使用Python的python build -in stringio模块。它具有类似于文件对象的行为,但它操作内存文件。因此,我们可以像这样编写代码:

  尝试:

  导入CSTRINGIO作为Stringio

  除非Inflterror:

  导入Stringio

  mstream = stringio.stringio()

  img = create_validate_code()[0]

  img.Save(Mstream,“ GIF”)

  这样,当我们需要输出时,我们只需要使用“ mstream.getValue()”。例如,在django中,我们首先定义此URL:

  来自django.conf.urls.defaults导入 *

  urlpatterns =模式('example.views',

  url(r'^value/$','value,name ='value'),name ='value'),

  治愈

  在视图中,我们将正确的字符串保存在会话中,以便当用户提交表单时,我们可以与会话中的正确字符串进行比较。

  从django.shortcuts导入httpresponse

  从价值导入create_validate_code

  def validate(请求):

  mstream = stringio.stringio()

  validate_code = create_validate_code()

  img = value_code [0]

  img.Save(Mstream,“ GIF”)

  request.session ['value'] = value_code [1]

  返回httpresponse(mstream.getValue(),“ image/gif”)

  render_to_response('bb.html',{'news':( buf.getValue(),'image/gif')})

  关于这句话有一些问题。回。

  另外,您的bb.html中的内容是什么?只有一个句子?

  如果是这样。

  r = render_to_response('bb.html',{'news':( buf.getValue(),'image/gif')})})})})})})

  然后引用r,尝试将其内容类型重写为“ image/gif”

  也许成功。也许。

  前端直接带到用户名,密码和其他参数,以将请求发送到背景。如果您害怕密码安全问题,则可以转到HTTPS或同意解密方法。后端 - 严格验证用户名和密码Matchsession_id的严格验证将cookie设置为前端。

  结论:以上是有关Django中有关验证代码的主要CTO注释的相关内容的相关内容摘要。希望它对您有所帮助!如果您解决了问题,请与更多关心此问题的朋友分享?