博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python第一百一十八天---ajax--图片验证码 + Session
阅读量:5280 次
发布时间:2019-06-14

本文共 9134 字,大约阅读时间需要 30 分钟。

原生AJAX   
Ajax主要就是使用 【XmlHttpRequest】对象来完成请求的操作,该对象在主流浏览器中均存在(除早起的IE),Ajax首次出现IE5.5中存在(ActiveX控件)。
1、XmlHttpRequest对象介绍
XmlHttpRequest对象的主要方法:
1 XmlHttpRequest对象的主要方法: 2     a. void open(String method,String url,Boolen async) 3    用于创建请求 4  5    参数: 6        method: 请求方式(字符串类型),如:POST、GET、DELETE... 7        url:    要请求的地址(字符串类型) 8        async:  是否异步(布尔类型) 9 10 b. void send(String body)11     用于发送请求12 13     参数:14         body: 要发送的数据(字符串类型)15 16 c. void setRequestHeader(String header,String value)17     用于设置请求头18 19     参数:20         header: 请求头的key(字符串类型)21         vlaue:  请求头的value(字符串类型)22 23 d. String getAllResponseHeaders()24     获取所有响应头25 26     返回值:27         响应头数据(字符串类型)28 29 e. String getResponseHeader(String header)30     获取响应头中指定header的值31 32     参数:33         header: 响应头的key(字符串类型)34 35     返回值:36         响应头中指定的header对应的值37 38 f. void abort()39 40     终止请求
View Code
XmlHttpRequest对象的主要属性:
1 a. Number readyState 2    状态值(整数) 3  4    详细: 5       0-未初始化,尚未调用open()方法; 6       1-启动,调用了open()方法,未调用send()方法; 7       2-发送,已经调用了send()方法,未接收到响应; 8       3-接收,已经接收到部分响应数据; 9       4-完成,已经接收到全部响应数据;10 11     b. Function onreadystatechange12        当readyState的值改变时自动触发执行其对应的函数(回调函数)13 14     c. String responseText15        服务器返回的数据(字符串类型)16 17     d. XmlDocument responseXML18        服务器返回的数据(Xml对象)19 20     e. Number states21        状态码(整数),如:200、404...22 23     f. String statesText24        状态文本(字符串),如:OK、NotFound...
View Code
2、跨浏览器支持   
XmlHttpRequest     IE7+, Firefox, Chrome, Opera, etc. ActiveXObject("Microsoft.XMLHTTP")     IE6, IE5
基于原生AJAX - Demo
1  2      3      4         
5 6 7 8 9

XMLHttpRequest - Ajax请求

10 11 12 13 14 62 63 64
View Code

 

 
jQuery Ajax  jQuery其实就是一个JavaScript的类库,其将复杂的功能做了上层封装,使得开发者可以在其基础上写更少的代码实现更多的功能。  jQuery 不是生产者,而是大自然搬运工。  jQuery Ajax本质 XMLHttpRequest 或 ActiveXObject  注:2.+版本不再支持IE9以下的浏览器
1 jQuery Ajax 方法列表 2     jQuery.get(...) 3                 所有参数: 4                      url: 待载入页面的URL地址 5                     data: 待发送 Key/value 参数。 6                  success: 载入成功时回调函数。 7                 dataType: 返回内容格式,xml, json,  script, text, html 8  9 10             jQuery.post(...)11                 所有参数:12                      url: 待载入页面的URL地址13                     data: 待发送 Key/value 参数14                  success: 载入成功时回调函数15                 dataType: 返回内容格式,xml, json,  script, text, html16 17 18             jQuery.getJSON(...)19                 所有参数:20                      url: 待载入页面的URL地址21                     data: 待发送 Key/value 参数。22                  success: 载入成功时回调函数。23 24 25             jQuery.getScript(...)26                 所有参数:27                      url: 待载入页面的URL地址28                     data: 待发送 Key/value 参数。29                  success: 载入成功时回调函数。30 31 32             jQuery.ajax(...)33 34                 部分参数:35 36                         url:请求地址37                        type:请求方式,GET、POST(1.9.0之后用method)38                     headers:请求头39                        data:要发送的数据40                 contentType:即将发送信息至服务器的内容编码类型(默认: "application/x-www-form-urlencoded; charset=UTF-8")41                       async:是否异步42                     timeout:设置请求超时时间(毫秒)43 44                  beforeSend:发送请求前执行的函数(全局)45                    complete:完成之后执行的回调函数(全局)46                     success:成功之后执行的回调函数(全局)47                       error:失败之后执行的回调函数(全局)48 49 50                     accepts:通过请求头发送给服务器,告诉服务器当前客户端课接受的数据类型51                    dataType:将服务器端返回的数据转换成指定类型52                                    "xml": 将服务器端返回的内容转换成xml格式53                                   "text": 将服务器端返回的内容转换成普通文本格式54                                   "html": 将服务器端返回的内容转换成普通文本格式,在插入DOM中时,如果包含JavaScript标签,则会尝试去执行。55                                 "script": 尝试将返回值当作JavaScript去执行,然后再将服务器端返回的内容转换成普通文本格式56                                   "json": 将服务器端返回的内容转换成相应的JavaScript对象57                                  "jsonp": JSONP 格式58                                           使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数59 60                                   如果不指定,jQuery 将自动根据HTTP包MIME信息返回相应类型(an XML MIME type will yield XML, in 1.4 JSON will yield a JavaScript object, in 1.4 script will execute the script, and anything else will be returned as a string61 62                  converters: 转换器,将服务器端的内容根据指定的dataType转换类型,并传值给success回调函数63                          $.ajax({64                               accepts: {65                                 mycustomtype: 'application/x-some-custom-type'66                               },67 68                               // Expect a `mycustomtype` back from server69                               dataType: 'mycustomtype'70 71                               // Instructions for how to deserialize a `mycustomtype`72                               converters: {73                                 'text mycustomtype': function(result) {74                                   // Do Stuff75                                   return newresult;76                                 }77                               },78                             });
View Code

 

基于jQueryAjax - Demo
1  2      3      4         
5 6 7 8 9

10 11

12 13 14 15 30 31
View Code

 

 

图片验证码 + Session

check_code.py

 

1 #!/usr/bin/env python  2 # -*- coding:utf-8 -*-  3   4 import random  5 from PIL import Image, ImageDraw, ImageFont, ImageFilter  6   7 _letter_cases = "abcdefghjkmnpqrstuvwxy"  # 小写字母,去除可能干扰的i,l,o,z  8 _upper_cases = _letter_cases.upper()  # 大写字母  9 _numbers = ''.join(map(str, range(3, 10)))  # 数字 10 init_chars = ''.join((_letter_cases, _upper_cases, _numbers)) 11  12  13 def create_validate_code(size=(120, 30), 14                          chars=init_chars, 15                          img_type="GIF", 16                          mode="RGB", 17                          bg_color=(255, 255, 255), 18                          fg_color=(0, 0, 255), 19                          font_size=18, 20                          font_type="Monaco.ttf", 21                          length=4, 22                          draw_lines=True, 23                          n_line=(1, 2), 24                          draw_points=True, 25                          point_chance=2): 26     """ 27     @todo: 生成验证码图片 28     @param size: 图片的大小,格式(宽,高),默认为(120, 30) 29     @param chars: 允许的字符集合,格式字符串 30     @param img_type: 图片保存的格式,默认为GIF,可选的为GIF,JPEG,TIFF,PNG 31     @param mode: 图片模式,默认为RGB 32     @param bg_color: 背景颜色,默认为白色 33     @param fg_color: 前景色,验证码字符颜色,默认为蓝色#0000FF 34     @param font_size: 验证码字体大小 35     @param font_type: 验证码字体,默认为 ae_AlArabiya.ttf 36     @param length: 验证码字符个数 37     @param draw_lines: 是否划干扰线 38     @param n_lines: 干扰线的条数范围,格式元组,默认为(1, 2),只有draw_lines为True时有效 39     @param draw_points: 是否画干扰点 40     @param point_chance: 干扰点出现的概率,大小范围[0, 100] 41     @return: [0]: PIL Image实例 42     @return: [1]: 验证码图片中的字符串 43     """ 44  45     width, height = size  # 宽高 46     # 创建图形 47     img = Image.new(mode, size, bg_color) 48     draw = ImageDraw.Draw(img)  # 创建画笔 49  50     def get_chars(): 51         """生成给定长度的字符串,返回列表格式""" 52         return random.sample(chars, length) 53  54     def create_lines(): 55         """绘制干扰线""" 56         line_num = random.randint(*n_line)  # 干扰线条数 57  58         for i in range(line_num): 59             # 起始点 60             begin = (random.randint(0, size[0]), random.randint(0, size[1])) 61             # 结束点 62             end = (random.randint(0, size[0]), random.randint(0, size[1])) 63             draw.line([begin, end], fill=(0, 0, 0)) 64  65     def create_points(): 66         """绘制干扰点""" 67         chance = min(100, max(0, int(point_chance)))  # 大小限制在[0, 100] 68  69         for w in range(width): 70             for h in range(height): 71                 tmp = random.randint(0, 100) 72                 if tmp > 100 - chance: 73                     draw.point((w, h), fill=(0, 0, 0)) 74  75     def create_strs(): 76         """绘制验证码字符""" 77         c_chars = get_chars() 78         strs = ' %s ' % ' '.join(c_chars)  # 每个字符前后以空格隔开 79  80         font = ImageFont.truetype(font_type, font_size) 81         font_width, font_height = font.getsize(strs) 82  83         draw.text(((width - font_width) / 3, (height - font_height) / 3), 84                   strs, font=font, fill=fg_color) 85  86         return ''.join(c_chars) 87  88     if draw_lines: 89         create_lines() 90     if draw_points: 91         create_points() 92     strs = create_strs() 93  94     # 图形扭曲参数 95     params = [1 - float(random.randint(1, 2)) / 100, 96               0, 97               0, 98               0, 99               1 - float(random.randint(1, 10)) / 100,100               float(random.randint(1, 2)) / 500,101               0.001,102               float(random.randint(1, 2)) / 500103               ]104     img = img.transform(size, Image.PERSPECTIVE, params)  # 创建扭曲105 106     img = img.filter(ImageFilter.EDGE_ENHANCE_MORE)  # 滤镜,边界加强(阈值更大)107 108     return img, strs
View Code

 

 
 

转载于:https://www.cnblogs.com/uge3/p/7464761.html

你可能感兴趣的文章
内存泄漏调查
查看>>
jquery获取html元素的绝对位置和相对位置的方法
查看>>
谈谈spring
查看>>
ios中webservice报文的拼接
查看>>
Power BI 报告的评论服务支持移动设备
查看>>
HDU 4920 Matrix multiplication
查看>>
ACdream 1068
查看>>
会声会影毛玻璃制作
查看>>
HDU 2665 Kth number
查看>>
CodeChef DGCD Dynamic GCD
查看>>
记叙在人生路上对你影响最大的三位老师
查看>>
002.大数据第二天
查看>>
python装饰器
查看>>
树上的路径
查看>>
【转载】TCP好文
查看>>
系统平均负载
查看>>
问题总结
查看>>
jenkins升级为2.134
查看>>
软件随笔
查看>>
C/C++知识补充 (1)
查看>>