python编程经验
定义表注释读取使用
users = await User.all().values() field_map = {field.model_field_name: field.description for field in User._meta.fields_map.values()} result = [{field_map.get(key, key): value for key, value in user.items()} for user in users]
def some_long_running_function(files, tt_token):
try: date = int(round(time.time() * 1000)) print('date', date) return return401(e.args[0]) # 用来启动同步任务的函数 async def run_in_thread(func, files, tt_token): loop = asyncio.get_event_loop() result = await loop.run_in_executor(None, func, files, tt_token) return result async def addKey_tasks_function(tasks): try: if len(tasks) > 0: responses = await asyncio.gather(*tasks) # todo 多个函数并行操作 print(f'addKey的任务数量:{len(responses)}') except Exception as e: traceback.print_exc() rs.msgevent(1, '紧急', '/assign/addFace', traceback.format_exc(), '用户录入人脸', 0) return return401(e.args[0]) # 用来启动异步任务的函数 async def start_background_tasks(task_func, tasks) -> None: asyncio.create_task(task_func(tasks)) # 调用同步 res = await run_in_thread(some_long_running_function, files, tt_token) # 调用异步 for runningo, locko in zip(runningos, locko_list):
tasks.append(sendKey_is_fingerprintNumber(is_fingerprintNumber, runningo, p, usero, locko)) # tasks = [add_running(running, p, licenseeo, locko, extra={'lock_id': locko.id}) for locko in locko_list] # responses = await asyncio.gather(*tasks) await start_background_tasks(addKey_tasks_function, tasks)
教训:漏掉await,返回500错误
教训:小心同样的url使用了同样的POST方法,就是有2个相同的访问入口。
# 相关包的安装:pip install alibabacloud_iot20180120==3.1.1
# 查询后发现是urllib3模块和chardet模块版本不一致
# 解决办法
# 卸载urllib3和chardet,并且更新requests模块
# 代码
# pip uninstall urllib3
# pip uninstall chardet
# pip install --upgrade requests
fieldname的key转换为描述的中文名的key
users = await User.all().values() field_map = {field.model_field_name: field.description for field in User._meta.fields_map.values()} result = [{field_map.get(key, key): value for key, value in user.items()} for user in users]
fingerprintNumber
1、录入,获取start_time和end_time时,只关注 能包含 now 的时间段 /api5/getFingerLockData f = {'user': licensee_id, 'lock': lock_id, 'start_time__lte': inow(), 'end_time__gte': inow()} runningos = await Running.filter(**f) if not runningos: raise Exception('没有此门锁权限') end_time_list = [runningo.end_time for runningo in runningos] end_time = max(end_time_list) 2、删除,对比时,也 只关注 能包含 now 的时间段 job_bulk_create_update_6s for runningo in runningos: if runningo.start_time < inow() < runningo.end_time: # todo 与 now 对参照进行对比 fingero = await Finger.filter(user_id=runningo.user_id, lock_id=runningo.lock_id).first() if fingero.end_time < runningo.end_time: # todo finger授权结束时间早于删除结束时间,则要删除finger delete = await delete_finger(fingero) # todo 执行删除finger函数
转换为description(verbose_name)输出
users = await User.all().values() field_map = {field.model_field_name: field.description for field in User._meta.fields_map.values()} result = [{field_map.get(key, key): value for key, value in user.items()} for user in users]
API 设计、开发、测试一体化协作平台:Apifox
Apifox = Postman + Swagger + Mock + JMeter
@router.post('/facelock/addFace', name="用户在小程序自行录入", tags=["5期-开锁小程序"]) async def addFace(request: Request, facefile: UploadFile = File(...), token: str = Header(...)): try: user_id, mobile, company_id, p = await check_auth([9], token, request.headers.get("x-forwarded-for"), False) userorgo = await Userorg.filter(user_id=user_id).first() companyId = userorgo.company_id if userorgo else 2 print('companyId', companyId) # facefile.file.seek(0, 2) # 将文件指针移动到文件末尾 # file_size = facefile.file.tell() # 获取文件大小 # print("上传文件大小:", file_size) contents = await facefile.read() # todo 前端 >>> contents files = { 'image': ('1111.jpg', contents, 'image/jpeg') } # print(type(contents)) # base64_face = base64.b64encode(contents) # 如果想要在浏览器上访问base64格式图片,需要在前面加上:data:image/jpeg;base64, # base64_utf8_face = str(base64_face, 'utf-8') # import os # pwd = os.path.abspath(".") # path = f'{pwd}/face/1233.jpg' # import aiofiles # async with aiofiles.open(path, "rb") as fp: # face_contents = await fp.read() # print(type(face_contents)) # files = { # 'image': ('1233.jpg', contents, 'image/jpg') # '1111.jpg', # } # 获取文件大小 # url = 'https://cnapi.sciener.com/v3/face/getFeatureDataByPhoto' status, res = await tt_http_post(companyId, files)
python中一切皆为对象,inow是函数,inow()是int,是函数的结果
上述print语句结果如下:print(i, j)
python error
if-elif-else 跟 if-if-if 的区别
python 非空判断
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix