mirror of
https://github.com/fastapiadmin/FastapiAdmin.git
synced 2026-09-24 05:26:58 +00:00
feat: 重构前端项目结构并优化代码
refactor: 迁移前端资源文件至web目录 feat: 新增多种图标资源 style: 统一代码风格和格式化配置 docs: 更新README和文档说明 chore: 更新依赖和配置文件 fix: 修复部分类型定义和枚举 perf: 优化路由和组件加载逻辑
This commit is contained in:
@@ -0,0 +1,281 @@
|
||||
# -*- 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))
|
||||
Reference in New Issue
Block a user