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

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日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度