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 非空判断

 

posted @ 2023-12-01 20:42  pearlcity  阅读(16)  评论(0编辑  收藏  举报