如何从 URL 查询字符串中查找非空变量?或者我们可以从 python 中的请求中获取 URL 查询字符串中的变量
How to find not null variables from URL query string? or can we get the variable in URL query string from request in python
我想根据 Django 中的多个字段过滤数据 python。
场景是,如果对网络服务器的 GET 请求是 /searchStudent/?firstName=&lastName=xyzage=23&class=&city=
而我们不知道什么可以是查询字符串中可能的参数,其中一些可以带值,而一些变量不带值。问题是,是否有任何方法可以从请求中获取只有值或没有值的变量。我知道我们可以简单地通过使用 request.GET.get('city')
来获取值,但我正在寻找从查询字符串中获取非空变量的方法,有没有办法从查询字符串中找到非值变量?在上面的场景中 city, class, and firstName
没有值,我不想在过滤器上添加它。什么是正确的方法?请提出正确的方法。
要获取非空查询参数的字典,请使用此代码:
non_empty_params = dict((field, value)
for field, value in request.GET.iteritems() if value)
但不要以这种方式构建查询集。您永远不应该相信来自用户输入的数据。所以你必须有一个字段列表来搜索并使用这个列表来过滤掉不正确的字段名称:
fields = ('firstName', 'lastName', 'age', 'class', 'city', )
filter_params = dict((field, value)
for field, value in request.GET.iteritems()
if value and field in fields)
students = Student.objects.filter(**filter_params)
我这样做了,我得到了动态过滤的答案
filter_args={}
if request.GET.get('firstName') :
filter_args['firstName']=request.GET.get('firstName')
if request.GET.get('lastName') :
filter_args['lastName']=request.GET.get('lastName')
if request.GET.get('city') :
filter_args['city']=request.GET.get('city')
Student.object.filter(**filter_args)
这就是所谓的动态查询,我不知道这一点。感谢@catavaran,提出概念。
也提到了这个 link Dynamic Django Queries
我想根据 Django 中的多个字段过滤数据 python。
场景是,如果对网络服务器的 GET 请求是 /searchStudent/?firstName=&lastName=xyzage=23&class=&city=
而我们不知道什么可以是查询字符串中可能的参数,其中一些可以带值,而一些变量不带值。问题是,是否有任何方法可以从请求中获取只有值或没有值的变量。我知道我们可以简单地通过使用 request.GET.get('city')
来获取值,但我正在寻找从查询字符串中获取非空变量的方法,有没有办法从查询字符串中找到非值变量?在上面的场景中 city, class, and firstName
没有值,我不想在过滤器上添加它。什么是正确的方法?请提出正确的方法。
要获取非空查询参数的字典,请使用此代码:
non_empty_params = dict((field, value)
for field, value in request.GET.iteritems() if value)
但不要以这种方式构建查询集。您永远不应该相信来自用户输入的数据。所以你必须有一个字段列表来搜索并使用这个列表来过滤掉不正确的字段名称:
fields = ('firstName', 'lastName', 'age', 'class', 'city', )
filter_params = dict((field, value)
for field, value in request.GET.iteritems()
if value and field in fields)
students = Student.objects.filter(**filter_params)
我这样做了,我得到了动态过滤的答案
filter_args={}
if request.GET.get('firstName') :
filter_args['firstName']=request.GET.get('firstName')
if request.GET.get('lastName') :
filter_args['lastName']=request.GET.get('lastName')
if request.GET.get('city') :
filter_args['city']=request.GET.get('city')
Student.object.filter(**filter_args)
这就是所谓的动态查询,我不知道这一点。感谢@catavaran,提出概念。
也提到了这个 link Dynamic Django Queries