parent
d15b583804
commit
fc1963c8a9
@ -0,0 +1,65 @@ |
|||||||
|
export function GetRandomNum(Min, Max) { |
||||||
|
const Range = Max - Min; |
||||||
|
const Rand = Math.random(); |
||||||
|
return (Min + Math.round(Rand * Range)); |
||||||
|
} |
||||||
|
|
||||||
|
export function getRandomStr(str_length = 32) { |
||||||
|
const SIGNING_v1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'//36
|
||||||
|
// const SIGNING_v2 ='ABCDEFGHJKMNPQRSTUVWXYZ23456789'//31
|
||||||
|
// const SIGNING_v3 ='1234567890'//10
|
||||||
|
// const SIGNING_v4 ='ABCDEFGHIJKLMNOPQRSTUVWXYZ'//26
|
||||||
|
const SIGNING_v5 = 'abcdefghigklmnopqrstuvwxyz'//26
|
||||||
|
let random_str = SIGNING_v1 + SIGNING_v5 |
||||||
|
let random_code = '' |
||||||
|
str_length -= 1 |
||||||
|
for (let i = 0; i < str_length; i++) { |
||||||
|
random_code = random_code + random_str[GetRandomNum(0, str_length)] |
||||||
|
} |
||||||
|
return random_code |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
export function checkEmail(email) { |
||||||
|
let re = /^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$/; |
||||||
|
return re.test(email); |
||||||
|
} |
||||||
|
|
||||||
|
export function checkphone(email) { |
||||||
|
let re = /^1\d{10}$/; |
||||||
|
return re.test(email); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
export function geetestbase(func, self, uid, params, callback, errback, readyback) { |
||||||
|
func(res => { |
||||||
|
if (res.code === 1000) { |
||||||
|
let data = res.data; |
||||||
|
// eslint-disable-next-line no-undef
|
||||||
|
initGeetest({ |
||||||
|
gt: data.gt, |
||||||
|
challenge: data.challenge, |
||||||
|
new_captcha: data.new_captcha, // 用于宕机时表示是新验证码的宕机
|
||||||
|
offline: !data.success, // 表示用户后台检测极验服务器是否宕机,一般不需要关注
|
||||||
|
product: "float", // 产品形式,包括:float,popup
|
||||||
|
width: "100%" |
||||||
|
}, (captchaObj) => { |
||||||
|
self.$refs.captcha.innerHTML = ''; |
||||||
|
captchaObj.appendTo("#captcha"); |
||||||
|
captchaObj.onReady(() => { |
||||||
|
readyback() |
||||||
|
}).onSuccess(() => { |
||||||
|
params.geetest = captchaObj.getValidate(); |
||||||
|
callback(params); |
||||||
|
}).onError(() => { |
||||||
|
captchaObj.destroy(); |
||||||
|
}); |
||||||
|
}); |
||||||
|
} else { |
||||||
|
errback(res) |
||||||
|
} |
||||||
|
}, { |
||||||
|
"methods": "PUT", |
||||||
|
"data": {user_id: uid} |
||||||
|
}); |
||||||
|
} |
@ -0,0 +1,81 @@ |
|||||||
|
#!/usr/bin/env python |
||||||
|
# -*- coding:utf-8 -*- |
||||||
|
# project: 3月 |
||||||
|
# author: NinEveN |
||||||
|
# date: 2022/3/15 |
||||||
|
import logging |
||||||
|
import time |
||||||
|
|
||||||
|
from django.core.cache import cache |
||||||
|
|
||||||
|
from common.cache.storage import PendingStateCache |
||||||
|
|
||||||
|
logger = logging.getLogger(__name__) |
||||||
|
|
||||||
|
|
||||||
|
def set_pending_cache(unique_key, cache_data, cache_obj, timeout): |
||||||
|
if unique_key in cache_data: |
||||||
|
cache_data.remove(unique_key) |
||||||
|
logger.warning(f'return unique_key:{unique_key} cache_data: {cache_data} ') |
||||||
|
cache_obj.set_storage_cache(cache_data, timeout) |
||||||
|
|
||||||
|
|
||||||
|
def get_pending_result(func, expect_func, loop_count=10, sleep_time=3, unique_key='default_key', |
||||||
|
run_func_count=2, pop_first=True, *args, **kwargs): |
||||||
|
""" |
||||||
|
:param func: 将要运行的函数对象 |
||||||
|
:param expect_func: 期待的运行结果函数 |
||||||
|
:param loop_count: 执行次数 |
||||||
|
:param sleep_time: 执行循环等待时间 |
||||||
|
:param unique_key: 11请求唯一标识,用与函数并发请求 |
||||||
|
:param run_func_count: 11函数并发请求数,超过该次数,会自动移除多余等待 |
||||||
|
:param pop_first: 11超出,是否自动移除最老的请求,True: 移除最老的, False: 移除最新的 |
||||||
|
:param args: |
||||||
|
:param kwargs: |
||||||
|
:return: |
||||||
|
""" |
||||||
|
locker_key = kwargs.pop('locker_key') |
||||||
|
cache_timeout = loop_count * sleep_time * (run_func_count + 1) |
||||||
|
cache_obj = PendingStateCache(locker_key) |
||||||
|
cache_data = cache_obj.get_storage_cache() |
||||||
|
is_pop = False |
||||||
|
if cache_data and isinstance(cache_data, list): |
||||||
|
if unique_key not in cache_data: |
||||||
|
cache_data.append(unique_key) |
||||||
|
if len(cache_data) > run_func_count and len(cache_data) > 0: |
||||||
|
is_pop = True |
||||||
|
if pop_first: |
||||||
|
cache_data.pop(0) |
||||||
|
else: |
||||||
|
cache_data.pop() |
||||||
|
else: |
||||||
|
cache_data = [unique_key] |
||||||
|
|
||||||
|
cache_obj.set_storage_cache(cache_data, cache_timeout) |
||||||
|
if not pop_first and len(cache_data) == run_func_count and is_pop: |
||||||
|
logger.warning(f'unique_key:{unique_key} cache_data: {cache_data} ') |
||||||
|
return True, {'err_msg': '请求重复,请稍后再试'} |
||||||
|
try: |
||||||
|
with cache.lock(f"get_pending_result_{locker_key}", timeout=loop_count * sleep_time): |
||||||
|
count = 1 |
||||||
|
while True: |
||||||
|
cache_data = cache_obj.get_storage_cache() |
||||||
|
logger.warning(f'unique_key:{unique_key} cache_data: {cache_data} ') |
||||||
|
if cache_data and isinstance(cache_data, list) and unique_key in cache_data: |
||||||
|
result = func(*args, **kwargs) |
||||||
|
if expect_func(result, *args, **kwargs): |
||||||
|
set_pending_cache(unique_key, cache_data, cache_obj, cache_timeout) |
||||||
|
return True, {'data': result} |
||||||
|
time.sleep(sleep_time) |
||||||
|
if loop_count < count: |
||||||
|
set_pending_cache(unique_key, cache_data, cache_obj, cache_timeout) |
||||||
|
return False, {'err_msg': '请求超时'} |
||||||
|
count += 1 |
||||||
|
else: |
||||||
|
set_pending_cache(unique_key, cache_data, cache_obj, cache_timeout) |
||||||
|
return True, {'err_msg': '请求重复,请稍后再试'} |
||||||
|
|
||||||
|
except Exception as e: |
||||||
|
logger.warning(f'get pending result exception: {e}') |
||||||
|
set_pending_cache(unique_key, cache_data, cache_obj, cache_timeout) |
||||||
|
return False, {'err_msg': '内部错误'} |
Loading…
Reference in new issue