捕获request.GET中的url参数
时间:2020-03-06 14:53:41 来源:igfitidea点击:
我目前正在定义正则表达式,以捕获url中的参数,如本教程中所述。我如何从HttpRequest对象的一部分访问URL中的参数?我的HttpRequest.GET当前返回一个空的QueryDict对象。
我想学习如何在没有库的情况下执行此操作,以便可以更好地了解Django。
解决方案
当url像:" 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
这并不是我们所要求的,但是此代码段有助于管理"模板"中的" query_strings"。
为了澄清camflan的解释,让我们假设我们有
- 规则
url(regex = r'^ user /(?P <username> \ w {1,50})/ $',view ='views.profile_page')
- 传入请求中的" http:// domain / user / thaiyoshi /?message = Hi"
URL调度程序规则将捕获URL路径的一部分(此处为" user / thaiyoshi /"`),并将其与请求对象一起传递给view函数。
解析查询字符串(此处为" 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路径或者查询参数来传递信息时,以下内容可能会有所帮助:
- 使用网址路径唯一标识资源,例如
/ blog / post / 15 /
(不是/ blog / posts /?id = 15
) - 使用查询参数来更改资源的显示方式,例如
/ blog / post / 15 /?show_comments = 1
或者/ blog / posts / 2008 /?sort_by = date&direction = desc
- 制作易于使用的网址,请避免使用ID号并使用例如日期,类别和/或者子弹:
/ blog / post / 2008/09/30 / django-urls /
def some_view(request, *args, **kwargs): if kwargs.get('q', None): # Do something here ..