捕获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 &lt;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 ..