我目前正在定义正则表达式,以便捕获URL中的参数,如教程中所述。我如何访问参数从URL作为HttpRequest对象的一部分?
我的HttpRequest。GET当前返回一个空的QueryDict对象。
我想学习如何在没有库的情况下做到这一点,这样我就可以更好地了解Django。
我目前正在定义正则表达式,以便捕获URL中的参数,如教程中所述。我如何访问参数从URL作为HttpRequest对象的一部分?
我的HttpRequest。GET当前返回一个空的QueryDict对象。
我想学习如何在没有库的情况下做到这一点,这样我就可以更好地了解Django。
当前回答
有人会想知道如何在文件urls.py中设置路径,例如
domain/search/?q=CA
这样我们就可以调用查询。
事实上,没有必要在文件urls.py中设置这样的路由。你只需要在urls.py中设置路由:
urlpatterns = [
path('domain/search/', views.CityListView.as_view()),
]
当你输入http://servername:port/domain/search/?q=CA。查询部分'?q=CA'将自动保留在你可以引用的哈希表中
request.GET.get('q', None).
下面是一个例子(文件views.py)
class CityListView(generics.ListAPIView):
serializer_class = CityNameSerializer
def get_queryset(self):
if self.request.method == 'GET':
queryset = City.objects.all()
state_name = self.request.GET.get('q', None)
if state_name is not None:
queryset = queryset.filter(state__name=state_name)
return queryset
此外,当你在URL中写入查询字符串时:
http://servername:port/domain/search/?q=CA
不要将查询字符串用引号括起来。例如,
http://servername:port/domain/search/?q="CA"
其他回答
如果你不知道参数的名称,想要使用它们,你可以使用request.GET.keys()或dict(request.GET)函数
def some_view(request, *args, **kwargs):
if kwargs.get('q', None):
# Do something here ..
你有两种常见的方法来做到这一点,以防你的URL看起来像这样:
https://domain/method/?a=x&b=y
版本1:
如果一个特定的键是强制性的,你可以使用:
key_a = request.GET['a']
如果键存在,则返回值为a,如果不存在则返回异常。
版本2:
如果你的键是可选的:
request.GET.get('a')
你可以尝试没有任何参数,这不会崩溃。 所以你可以用try: except:来包装它,并返回HttpResponseBadRequest()。 这是一种使代码不那么复杂的简单方法,不需要使用特殊的异常处理。
这些查询目前有两种方式。如果您想访问查询参数(GET),您可以查询以下命令:
http://myserver:port/resource/?status=1
request.query_params.get('status', None) => 1
如果你想访问POST传递的参数,你需要通过这种方式访问:
request.data.get('role', None)
使用'get()'访问字典(QueryDict),可以设置一个默认值。在上述情况下,如果没有通知'status'或'role',则值为None。
views.py
从rest_framework。response import响应 Def update_product(请求,pk): 返回响应({“pk”:pk})
Pk表示主键。
urls . py
从产品。视图导入update_product django。url导入路径 Urlpatterns = [ …, 路径(更新/产品/ < int: pk >”,update_product) ]