如何在Django中获取GET请求值?
我现在正在定义正则表达式,以便从网址中提取参数,就像教程里说的那样。我想知道如何通过 HttpRequest
对象来访问网址中的参数。
我现在的 HttpRequest.GET
返回的是一个空的 QueryDict
对象。
我想学习如何在不使用库的情况下做到这一点,这样我可以更好地了解Django。
19 个回答
87
使用GET方法
request.GET["id"]
使用POST方法
request.POST["id"]
446
- 一个规则
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