如何在Django中获取GET请求值?

629 投票
19 回答
917440 浏览
提问于 2025-04-11 09:33

我现在正在定义正则表达式,以便从网址中提取参数,就像教程里说的那样。我想知道如何通过 HttpRequest 对象来访问网址中的参数。

我现在的 HttpRequest.GET 返回的是一个空的 QueryDict 对象。

我想学习如何在不使用库的情况下做到这一点,这样我可以更好地了解Django。

19 个回答

87

使用GET方法

request.GET["id"]

使用POST方法

request.POST["id"]
446

为了更清楚地理解camflan解释,假设你有以下内容:

  • 一个规则 url(regex=r'^user/(?P<username>\w{1,50})/$', view='views.profile_page')
  • 一个请求地址 http://domain/user/thaiyoshi/?message=Hi

这个URL调度规则会抓取URL中的一部分路径(在这里是 "user/thaiyoshi/"),并将这些信息和请求对象一起传递给视图函数。

查询字符串(在这里是 message=Hi)会被解析,参数会以QueryDict的形式存储在request.GET中。对于HTTP GET参数,不会进行进一步的匹配或处理。

这个视图函数会使用从URL路径中提取的部分和一个查询参数:

def profile_page(request, username=None):
    user = User.objects.get(username=username)
    message = request.GET.get('message')

顺便提一下,你可以在request.method中找到请求的方法(在这个例子中是 "GET",而提交表单时通常是 "POST")。在某些情况下,检查这个方法是否符合你的预期是很有用的。

更新:在决定是使用URL路径还是查询参数来传递信息时,以下几点可能会有所帮助:

  • 使用URL路径来唯一标识资源,例如 /blog/post/15/(而不是 /blog/posts/?id=15
  • 使用查询参数来改变资源的显示方式,例如 /blog/post/15/?show_comments=1/blog/posts/2008/?sort_by=date&direction=desc
  • 为了让URL更友好,尽量避免使用ID数字,而是使用日期、类别和/或简短描述,例如 /blog/post/2008/09/30/django-urls/
848

当一个网址像 domain/search/?q=haha 这样时,你可以用 request.GET.get('q', '') 来获取参数。

这里的 q 是你想要的参数,而 '' 是如果找不到 q 时的默认值。

不过,如果你只是想设置你的 URLconf,那么从 regex 捕获到的内容会作为参数(或者命名参数)传递给函数。

比如:

(r'^user/(?P<username>\w{0,50})/$', views.profile_page,),

然后在你的 views.py 文件中,你会有

def profile_page(request, username):
    # Rest of the method

撰写回答