满口金牙 2023-03-18 11:07 采纳率: 91.1%
浏览 38
已结题

django 对复杂的get请求参数的处理,请教

对get 请求的参数进行处理,下面的方法可以用但感觉有些low
问题,请教更合理的方式:
1,为了让后端区分是 模糊查询还是全等查询,    我把请前端参数写成:  查询字段名={val:'...',equal:'False'}, 请教有什么更合理的办法
2, 因为veiws函数中 一般 只有一个get, 我又要区分是查询列表,还是查询一条数据, 又增加一个参数 type=list 让后端区别处理 


# 后端对request.query_params 参数进行处理的函数
def getCondition(query_params):
    # 前端get参数格式: { type:'list'|'single, 字段名:{val:string,equal:boolean} }
    # query_params: request.query_params
    # 过滤条件的参数
    condition = {}
   # 排序条件的参数
    order_by =[]
    # 排除不需要处理的参数
    exclude = ['page','page_size','limit','offset','type','order_by']

    if query_params.get('type') == 'list': # 判断查询是一条还是多条
        for param in query_params:
            # 排序参数,参端转过来的格式是:order_by='-name,update_time,...'
            if param == 'order_by':
                order_by = query_params.get(param).split(',')
                continue
            if param in exclude: 
                continue # 排除 type 参数

            #把  参数{ val:string, equal: boolean } 的字符串,转为dict格式
            obj = json.loads(query_params.get(param).replace("'", "\""))
            if not obj['equal']:
                condition[param +'__contains'] = obj['val']
            else:
                condition[param] = obj['val']
    # 如果只查询一条记录
    else:
        for param in query_params:
            if param in exclude: continue # 排除 type 参数
            condition[param] = query_params[param]
    print('sssssssssssssssssssssssssssssss',condition, order_by)
    return condition, order_by

  • 写回答

4条回答 默认 最新

  • MarkHan_ 2023-03-18 11:37
    关注

    该回答引用GPTᴼᴾᴱᴺᴬᴵ
    针对您提出的两个问题,我提供以下建议:

    1. 更合理的处理模糊查询和全等查询的方法
      您可以考虑使用两个不同的参数来区分模糊查询和全等查询,例如:
    • 查询字段名={val:'...',match:'exact'}
    • 查询字段名={val:'...',match:'contains'}

    其中,match参数的值为exact时表示全等查询,为contains时表示模糊查询。这样做的好处是能够更清晰地表达查询的意图,并且不需要将查询条件的字符串进行处理。

    1. 更合理的区分查询列表和查询单条数据的方法
      您可以使用两个不同的视图函数来处理查询列表和查询单条数据的请求,例如:
    • 查询列表的视图函数使用GET方法,不需要传递id等唯一标识符,可以根据条件查询多条记录,并返回一个列表。
    • 查询单条数据的视图函数使用GET方法,需要传递id等唯一标识符,可以根据id查询一条记录,并返回一个对象。

    这样做的好处是能够更好地区分两种不同类型的请求,并且可以使代码更加清晰易读。

    以上是我的建议,希望对您有所帮助。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月26日
  • 已采纳回答 3月18日
  • 创建了问题 3月18日

悬赏问题

  • ¥15 R语言绘制生存曲线时出现警告:All aesthetics have length 1, but the data has 2 rows.
  • ¥15 苍穹外卖拦截器token为null
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵
  • ¥15 券商软件上市公司信息获取问题
  • ¥100 ensp启动设备蓝屏,代码clock_watchdog_timeout
  • ¥15 Android studio AVD启动不了
  • ¥15 陆空双模式无人机怎么做
  • ¥15 想咨询点问题,与算法转换,负荷预测,数字孪生有关
  • ¥15 C#中的编译平台的区别影响