简介:许多朋友问有关如何在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注释的相关内容的相关内容摘要。希望它对您有所帮助!如果您解决了问题,请与更多关心此问题的朋友分享?