def generate_captcha(format='PNG', length=4, **kwargs): img, code = gvcode.generate(format=format, length=length, **kwargs) out = BytesIO() img.save(out, format=format) b64_img = base64.b64encode(out.getvalue()) return 'data:image/{type};base64,{img}'.format(type=format.lower(), img=b64_img), code
def get_captcha(): # 生成验证码并发送给前端 img, code = gvcode.generate(size=(80, 27), length=4) session['code'] = code # 将生成的验证码数据存入session out = StringIO() img.save(out, format='PNG') b64 = base64.b64encode(out.getvalue()) result = "data:image/png;base64," result = result + b64 return result
def generate_captcha_2(sequence): chars = [captcha_content[randint(0, len(captcha_content) - 1)]\ for _ in range(captcha_length)] img, code = gvcode.generate(size=(captcha_size["width"], captcha_size["height"]), chars=chars, format="PNG", draw_lines=False, draw_points=False) img.save(data_save_dir + "/" + "".join(chars) + "_" + str(uuid.uuid4()) + ".jpg")
def get_imageCode(): # 生成验证码图片 image, code = gvcode.generate() # 图片以二进制形式写入 buf = BytesIO() image.save(buf, 'jpeg') buf_str = buf.getvalue() # 把buf_str作为response返回前端,并设置首部字段 response = make_response(buf_str) response.headers['Content-Type'] = 'image/jpeg' # 将验证码字符串储存在session中 session['imageCode'] = code return response
def get(self, request): if request.META.has_key('HTTP_X_FORWARDED_FOR'): request_ip = request.META['HTTP_X_FORWARDED_FOR'] else: request_ip = request.META['REMOTE_ADDR'] verify = cache.get('verify_%s' % request_ip) if verify is not None: img, code = gvcode.generate() img.save(settings.VERIFY_IMG_PATH) cache.set('verify_%s' % request_ip, code, 1 * 24 * 60 * 60) return Response({'need_verify': True, 'verify_url': settings.VERIFY_IMG_URL}) else: return Response({'need_verify': False, 'verify_url': ''})
def _createpicbygvcode(self): return gvcode.generate(size=(self.image_width, self.image_height))
#!/usr/bin/python2 #coding=UTF-8 import base64 import gvcode from cStringIO import StringIO # size=(60, 27), img, code = gvcode.generate(size=(80, 27), length=4) # code:验证码的值 out = StringIO() img.save(out, format='PNG') b64 = base64.b64encode(out.getvalue()) result = "data:image/png;base64," result = result + b64 # print result, code print code img.save('./captcha.png')
import gvcode import os s,v=gvcode.generate() #s.show() print((s.size)) print(v) path = './image02' if not os.path.exists(path): os.makedirs(path) for i in range(2): pic,text=gvcode.generate() file_name= text+'.png' pic.save(path + file_name)
def create_code(): img, code = gvcode.generate(fg_color=(random.randint(10, 300), random.randint(50, 150), random.randint(50, 150))) return img, code
def generate_verification_code(): chars = 'ABCDEFGHKMNPQRSTUVWXY' font_file = os.path.join(os.path.dirname(current_dir), 'static/BRLNSR.TTF') image, code = gvcode.generate(chars=chars, font_file=font_file) return image, code
# coding=utf-8 import gvcode img, code = gvcode.generate((240, 60)) print code img.show() img.save('verification.jpg')
def test_generate(self): im, vcode = gvcode.generate() assert len(vcode) == 4
#生成激活码图片 # coding=utf-8 # def generate(self, size=(120, 30), chars=None, format='PNG', mode='RGB', bg_color=(255, 255, 255), fg_color=(0, 0, 255), font_size=18, font_file=None, length=4, draw_lines=True, line_range=(1, 2), draw_points=True, point_chance=2): # """ # @param size: 图片的大小,格式(宽,高),默认为(120, 30) # @param chars: 允许的字符集合,格式字符串 # @param format: 图片保存的格式,默认为 PNG,可选的为 GIF,JPEG,TIFF,PNG # @param mode: 图片模式,默认为 RGB # @param bg_color: 背景颜色,默认为白色 # @param fg_color: 前景色,验证码字符颜色,默认为蓝色 #0000FF # @param font_size: 验证码字体大小 # @param font_file: 验证码字体,默认为 None # @param length: 验证码字符个数 # @param draw_lines: 是否划干扰线 # @param line_range: 干扰线的条数范围,格式元组,默认为 (1, 2),只有 draw_lines 为s True 时有效 # @param draw_points: 是否画干扰点 # @param point_chance: 干扰点出现的概率,大小范围 [0, 100],只有 draw_points 为 True 时有效 # @return: [0]: PIL Image 实例 # @return: [1]: 验证码图片中的字符串 import gvcode img, code = gvcode.generate() print(code) #img.show() img.save('D:/www/python-ex/verification.jpg')
def login(self, request): """登录接口""" if 'HTTP_X_FORWARDED_FOR' in request.META: request_ip = request.META['HTTP_X_FORWARDED_FOR'] else: request_ip = request.META['REMOTE_ADDR'] username = request.data.get('username', '') password = request.data.get('password', '') verify_code = request.data.get('verify_code', '') # 失败次数和锁定时间 login_fail_limit_times = settings.LOGIN_FAILED_TIMES_LIMIT lock_time = settings.LOCK_TIME # 响应状态码和数据 result_code = 1 result_data = {'result_msg': '', 'need_verify': False} # 判断用户是否存在 exist_user = User.objects.filter(username=username).first() # 需要验证码首先验证验证码 if cache.get('verify_%s' % request_ip) is not None: result_data['need_verify'] = True verify = cache.get('verify_%s' % request_ip) if str.lower(verify).encode('utf-8') != str.lower(verify_code).encode('utf-8'): # 重新生成验证码 img, code = gvcode.generate() img.save(settings.VERIFY_IMG_PATH) cache.set('verify_%s' % request_ip, code, 1 * 24 * 60 * 60) result_code = 1 result_data['result_msg'] = '对不起,验证码错误!' # 生成验证码 img, code = gvcode.generate() img.save(settings.VERIFY_IMG_PATH) cache.set('verify_%s' % request_ip, code, 1 * 24 * 60 * 60) result_data['verify_url'] = settings.VERIFY_IMG_URL return Response({'result_code': result_code, 'result_data': result_data}) else: result_data['need_verify'] = False # 验证码通过判断登录信息 # 用户不存在 if not exist_user: result_code = 1 result_data['result_msg'] = '对不起,该用户不存在!' # 用户未激活 elif exist_user.is_active is False: result_code = 1 result_data['result_msg'] = '用户未激活,请联系管理员!' # 用户被锁定 elif cache.get('error_login_lock_%s_%s' % (request_ip, username)): time_stmap = cache.get('error_login_lock_%s_%s' % (request_ip, username)) lock_surplus_second = int(time_stmap) - int(time.time()) result_code = 2 result_data['result_msg'] = '用户已经锁定,请%s秒后再试。' % lock_surplus_second result_data['lock_surplus_second'] = lock_surplus_second else: # 登录认证 user = authenticate(username=username, password=password) # 登录失败 if user is None: # 记录登录者的IP和域名 error_login_data = cache.get('error_login_%s_%s' % (request_ip, username)) if error_login_data is None: result_code = 1 cache.set('error_login_%s_%s' % (request_ip, username), 0, lock_time * 60) result_data['result_msg'] = '登录失败,用户名密码错误!' else: new_error_login_data = int(error_login_data) + 1 cache.set('error_login_%s_%s' % (request_ip, username), new_error_login_data, lock_time * 60) if new_error_login_data < login_fail_limit_times: result_data['result_msg'] = '账户密码错误,再输入%s次用户将会锁定%s分钟。' \ % (login_fail_limit_times - new_error_login_data, lock_time) if new_error_login_data > 1: result_data['need_verify'] = True else: # 锁定用户 cache.set('error_login_lock_%s_%s' % (request_ip, username), int(time.time()) + lock_time * 60, lock_time * 60) lock_surplus_second = lock_time * 60 result_code = 2 result_data['result_msg'] = '用户已经锁定,请%s秒后再试。' % lock_surplus_second result_data['lock_surplus_second'] = lock_surplus_second # 登录成功 else: # user.backend = 'django.contrib.auth.backends.ModelBackend' # 指定默认的登录验证方式 # login(request, user) # token 登录 Token.objects.filter(user=user).delete() token, _ = Token.objects.get_or_create(user=user) # 保存用户登录信息 user_obj = User.objects.get(id=exist_user.id) user_obj.last_login = time_utils.get_current_time() user_obj.is_online = 1 # user_obj.session_id = request.session.session_key # 必须要先login登录完成,才会生成session_key user_obj.login_times += 1 user_obj.save() result_code = 0 cache.delete('verify_%s' % request_ip) cache.delete('error_login_%s_%s' % (request_ip, username)) result_data['need_verify'] = False # result_data['sessionid'] = user_obj.sessionid result_data['csrftoken'] = get_token(request) result_data['token'] = token.key # 生成验证码 if result_data["need_verify"]: img, code = gvcode.generate() img.save(settings.VERIFY_IMG_PATH) cache.set('verify_%s' % request_ip, code, 1 * 24 * 60 * 60) result_data['verify_url'] = settings.VERIFY_IMG_URL else: cache.delete('verify_%s' % request_ip) return Response({'result_code': result_code, 'result_data': result_data})
#!/usr/bin/python3 # coding: utf-8 # 安装 # https://github.com/vcodeclub/graphic-verification-code # pip install graphic-verification-code import gvcode gvcode.generate() gvcode.base64() # ('iVBORw0KGgoAAAANSUhEUgAAAHgAAAAeCAIAAABoq03CAAACyklEQVR4nN1aO04kMRB9NdoIQUIAEVcgIuAEKyQyUsShIOUmmwEpZyAgG4SI+GRTBB48bn+6XXZ52uxTB6OWXS5XPb+y20PMDAAAEdnfPaOFn+M2VUZcVPb/b0BEbe27ubKDtab2jKvHzFE0ekGXEANGM7Mx1yK9rs0ZNcqVyvwu9Q4nmeWlsUMF79ClESQ12qRxa2JSgEmXmsqu1PhEMTSxFhltXVXyoUiOcFJS438mW7iqnWO9Q+73AJnMueH+XRI5O0qCpbLd2TJmp4X+gYVo82wNJveXlwMHbm9xc7N2Qxpl9UozrdEhRlT7Z1YAcHgIIqjTKMpNZt7ZwfGxJ27lo6jTvyTQBqlw25/LJYjw/o69Pf1wezg7w+enyavvSSebIDXlIqKQB4sFVit9XqcENzpQi1WV6Y8LX6OLtSl6dl+tyoxljeUh5fgWSmAOWX3pmLE0W333QpbvkZbvZTkb34wp7zoKTpJOXwAgwvk5Li7ADGY8PfmrZMS4ihy79dzzbRzjHNXcXXpqaJUrXyVTIou8qWrJMRGOjvD8LHZgzGa7QGPDvtxBUlPKjKBioIOJxB3Lh/6B5e5uc2RwP3D387EpB+6BSyV/5fvoEAcHa5/Mrs7BX4CB6UCHlVAKIphl6m25RMGy1cL0YsbHR5VX0GX0y8s6Ug8Pm1kR4fT0H3NVncyECQrAGG43r67KU2jCvbsLZiyX5b61uFEGglOZVySRlu36eui2dHktInWNKEcnGGd0De/cdee+cRqIr+DKVj0GV3GyqDHj+nrwgcw+9/eTfWPnqdYnlMdHnJzkNnbz64pP+FJkStQxZaHGFHSLYRRfX0A2oaJtXB3I/+Y5FCuBD7ZLqnGZqrRitNWplEx3fm+Q0r39fby9lWz4ep+wCNL8TV4Vhepha4A0bN39JayuDktrbME13jrKr6/CjrMw+jfeOlbiGyMXxYAIZpe8AAAAAElFTkSuQmCC', # 'QnCg') def main(): pass if __name__ == '__main__': main()
def CAPTCHAimg(): s=gvcode.generate()
def _createpicbygvcode(self): return gvcode.generate(size=(IMAGE_WIDTH, IMAGE_HEIGHT))
#实现最简单,图片效果稍差 import gvcode s, v = gvcode.generate() s.save('./%s.jpg' % v)
# -*- coding:utf-8 -*- # @author :adolf import gvcode s, v = gvcode.generate() #序列解包 print(s) print(v)