mirror of
https://github.com/fastapiadmin/FastapiAdmin.git
synced 2026-09-22 13:05:18 +00:00
refactor: 迁移前端资源文件至web目录 feat: 新增多种图标资源 style: 统一代码风格和格式化配置 docs: 更新README和文档说明 chore: 更新依赖和配置文件 fix: 修复部分类型定义和枚举 perf: 优化路由和组件加载逻辑
282 lines
7.9 KiB
Python
282 lines
7.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
import string
|
|
import random
|
|
import datetime
|
|
from faker import Faker
|
|
from dateutil.relativedelta import relativedelta
|
|
|
|
|
|
class ContextPack:
|
|
def __init__(self):
|
|
self.faker = Faker(locale='zh_CN')
|
|
|
|
@property
|
|
def get_phone(self) -> int:
|
|
"""
|
|
:return: 随机生成手机号码
|
|
"""
|
|
phone = self.faker.phone_number()
|
|
return phone
|
|
|
|
@property
|
|
def get_id_number(self) -> int:
|
|
"""
|
|
|
|
:return: 随机生成身份证号码
|
|
"""
|
|
|
|
id_number = self.faker.ssn()
|
|
return id_number
|
|
|
|
@property
|
|
def get_female_name(self) -> str:
|
|
"""
|
|
|
|
:return: 女生姓名
|
|
"""
|
|
female_name = self.faker.name_male()
|
|
return female_name
|
|
|
|
@property
|
|
def get_male_name(self) -> str:
|
|
"""
|
|
|
|
:return: 男生姓名
|
|
"""
|
|
male_name = self.faker.name_female()
|
|
return male_name
|
|
|
|
@property
|
|
def get_email(self) -> str:
|
|
"""
|
|
|
|
:return: 生成邮箱
|
|
"""
|
|
email = self.faker.email()
|
|
return email
|
|
|
|
@property
|
|
def merchantSelfOperatedShop(self) -> int:
|
|
"""
|
|
|
|
:return: 商家端自营店铺ID
|
|
"""
|
|
SelfOperatedShop = 515
|
|
return SelfOperatedShop
|
|
|
|
@property
|
|
def get_secend_time(self)->datetime:
|
|
"""
|
|
计算当前时间: 年-月-日 时:分:秒:毫秒
|
|
:return:
|
|
"""
|
|
return datetime.datetime.now()
|
|
|
|
@property
|
|
def get_day_time(self)->str:
|
|
"""
|
|
计算当前时间: 年-月-日
|
|
:return:
|
|
"""
|
|
return datetime.datetime.now().strftime('%Y-%m-%d')
|
|
|
|
def generate_bank_card(self):
|
|
"""
|
|
生成随机银行卡号
|
|
"""
|
|
return self.faker.credit_card_number()
|
|
|
|
def generate_email(self):
|
|
"""
|
|
生成随机邮箱号
|
|
"""
|
|
return self.random_str(4) + self.faker.free_email()
|
|
|
|
@property
|
|
def generate_company(self):
|
|
"""
|
|
生成随机公司名称
|
|
"""
|
|
return self.faker.company_prefix() + self.random_str(5) + '测试' + self.faker.company_suffix()
|
|
|
|
@property
|
|
def generate_name(self):
|
|
"""
|
|
生成随机姓名
|
|
"""
|
|
return self.faker.name()
|
|
|
|
@property
|
|
def generate_unreal_phone(self):
|
|
"""
|
|
生成不存在的手机号
|
|
"""
|
|
phone = random.choice(['100', '110', '120']) + \
|
|
''.join(random.choice('0123456789') for _ in range(8))
|
|
return phone
|
|
|
|
def random_str(self, str_len: int) -> str:
|
|
"""从a-zA-Z0-9生成制定数量的随机字符
|
|
|
|
:param str_len: 字符串长度
|
|
:return:
|
|
"""
|
|
try:
|
|
str_len = int(str_len)
|
|
except ValueError:
|
|
raise Exception("调用随机字符失败,[ %s ]长度参数有误!" % str_len)
|
|
strings = ''.join(random.sample(string.hexdigits, +str_len))
|
|
return strings
|
|
|
|
def random_int(self, scope) -> int:
|
|
"""获取随机整型数据
|
|
|
|
:param scope: 数据范围
|
|
:return:
|
|
"""
|
|
try:
|
|
start_num, end_num = scope.split(",")
|
|
start_num = int(start_num)
|
|
end_num = int(end_num)
|
|
except ValueError:
|
|
raise Exception("调用随机整数失败,[ %s ]范围参数有误!" % str(scope))
|
|
if start_num <= end_num:
|
|
number = random.randint(start_num, end_num)
|
|
else:
|
|
number = random.randint(end_num, start_num)
|
|
return number
|
|
|
|
def random_float(self, data) -> float:
|
|
"""获取随机浮点数据
|
|
|
|
:param data: 数组
|
|
:return:
|
|
"""
|
|
try:
|
|
start_num, end_num, accuracy = data.split(",")
|
|
start_num = int(start_num)
|
|
end_num = int(end_num)
|
|
accuracy = int(accuracy)
|
|
except ValueError:
|
|
raise Exception("调用随机浮点数失败,[ %s ]范围参数或精度有误!" % data)
|
|
|
|
if start_num <= end_num:
|
|
number = random.uniform(start_num, end_num)
|
|
else:
|
|
number = random.uniform(end_num, start_num)
|
|
number = round(number, accuracy)
|
|
return number
|
|
|
|
def random_choice(self, data):
|
|
"""获取数组随机值
|
|
|
|
:param data: 数组
|
|
:return:
|
|
"""
|
|
_list = data.split(",")
|
|
each = random.choice(_list)
|
|
return each
|
|
|
|
def get_date_mark(self, now, mark, num):
|
|
if 'y' == mark:
|
|
return now + relativedelta(years=num)
|
|
elif 'm' == mark:
|
|
return now + relativedelta(months=num)
|
|
elif 'd' == mark:
|
|
return now + relativedelta(days=num)
|
|
elif 'h' == mark:
|
|
return now + relativedelta(hours=num)
|
|
elif 'M' == mark:
|
|
return now + relativedelta(minutes=num)
|
|
elif 's' == mark:
|
|
return now + relativedelta(seconds=num)
|
|
else:
|
|
raise Exception("日期字段标识[ %s ]错误, 请使用[年y,月m,日d,时h,分M,秒s]标识!" % mark)
|
|
|
|
def generate_date(self, expr=''):
|
|
"""生成日期对象(不含时分秒)
|
|
|
|
:param expr: 日期表达式,如"d-1"代表日期减1
|
|
:return:
|
|
"""
|
|
today = datetime.date.today()
|
|
if expr:
|
|
try:
|
|
mark = expr[:1]
|
|
num = int(expr[1:])
|
|
except (TypeError, NameError):
|
|
raise Exception("调用生成日期失败,日期表达式[ %s ]有误!" % expr)
|
|
return self.get_date_mark(today, mark, num)
|
|
else:
|
|
return today
|
|
|
|
def generate_datetime(self, expr=''):
|
|
"""生成日期时间对象(含时分秒)
|
|
|
|
:param expr: 日期表达式,如"d-1"代表日期减1
|
|
:return:
|
|
"""
|
|
now = datetime.datetime.now().replace(microsecond=0)
|
|
if expr:
|
|
try:
|
|
mark = expr[:1]
|
|
num = int(expr[1:])
|
|
except (TypeError, NameError):
|
|
raise Exception("调用生成日期失败,日期表达式[ %s ]有误!" % expr)
|
|
return self.get_date_mark(now, mark, num)
|
|
else:
|
|
return now
|
|
|
|
def generate_timestamp(self, expr='') -> int:
|
|
"""生成时间戳(13位)
|
|
|
|
:param expr: 日期表达式,如"d-1"代表日期减1
|
|
:return:
|
|
"""
|
|
datetime_obj = self.generate_datetime(expr)
|
|
return int(datetime.datetime.timestamp(datetime_obj)) * 1000
|
|
|
|
def generate_guid(self) -> str:
|
|
"""基于MAC地址+时间戳+随机数来生成GUID
|
|
|
|
:param:
|
|
:return:
|
|
"""
|
|
import uuid
|
|
return str(uuid.uuid1()).upper()
|
|
|
|
def generate_wxid(self):
|
|
"""基于AUTO标识+26位英文字母大小写+数字生成伪微信ID
|
|
|
|
:param:
|
|
:return:
|
|
"""
|
|
return 'AUTO' + ''.join(random.sample(string.ascii_letters + string.digits, 24))
|
|
|
|
def generate_noid(self, expr=''):
|
|
"""基于6位随机数字+出生日期+4位随机数生成伪身份证
|
|
|
|
:param expr: 日期表达式,如"d-1"代表日期减1
|
|
:return:
|
|
"""
|
|
# birthday = generate_date(expr)
|
|
# birthday = str(birthday).replace('-', '')
|
|
# return int(str(random.randint(100000, 999999)) + birthday + str(random.randint(1000, 9999)))
|
|
faker = Faker(locale='zh_CN')
|
|
return faker.ssn()
|
|
|
|
def generate_phone(self):
|
|
"""基于三大运营商号段+随机数生成伪手机号
|
|
|
|
:param:
|
|
:return:
|
|
"""
|
|
ctcc = [133, 153, 173, 177, 180, 181, 189, 191, 193, 199]
|
|
cucc = [130, 131, 132, 155, 156, 166, 175, 176, 185, 186, 166]
|
|
cmcc = [134, 135, 136, 137, 138, 139, 147, 150, 151, 152, 157, 158, 159, 172, 178, 182, 183, 184, 187, 188, 198]
|
|
begin = 10 ** 7
|
|
end = 10 ** 8 - 1
|
|
prefix = random.choice(ctcc + cucc + cmcc)
|
|
return str(prefix) + str(random.randint(begin, end))
|