概述
带有查询参数的url看起来像。
http://example.api.com/search/?name=jhon&age=26
在视图中,如果我使用django-filter,所有参数都将从请求中自动提取,并且它将返回一个筛选的查询集。
视图.py
class SearchView(TemplateView):
template_name = "search.html"
def get_queryset(self):
return SearchFilter(request.GET, queryset=Model.objects.all()).qs
def get_context_data(self, **kwargs):
context = super(SearchView, self).get_context_data(**kwargs)
return context
如果我想从request.GET中手动提取它,我可以做到。
def get_queryset(self):
# extracting query parameter
q = self.request.GET.get('name')
问题陈述
我的搜索url看起来像
http://example.api.com/search/jhon-26
我这样做是因为我不想公开“name”和“age”这样的密钥,这是为了安全抽象,这是我的db表的列。
我正在**kwargs中获取jhon-26
,我想将其拆分并设置为request.GET的查询参数,以便我的筛选器类可以正常工作
问题
有什么要设置的属性是request.GET吗?
# may be any set function available for this
self.request.GET.set('name', 'jhon')
我怎样才能做到这一点。
我找到了将查询参数设置为request.GEThere的解决方案
由于request.GET QueryDict实例是不可变的,因此我们不能直接修改它,因此需要将其可变属性设置为True
好吧,你可以像django filter那样简单地说:
但是,对于request.GET,由于它的值通常是list,因此必须对其进行格式化才能生成有效的字典。你可以简单地做:
然后可以将其余变量添加到其中:
然后做:
如果您不一定需要使用request.GET(因为django filter有一种方法),那么您可以简单地形成字典并在模型的filter方法中使用它。
顺便问一下,如果您不想让公众看到您的数据,为什么要使用request.GET?你的网址是怎么形成的?你可能想忽略所有这些,只要你的代码工作正常无论如何!
相关问题 更多 >
编程相关推荐