Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 捕获request.GET中的URL参数_Django_Url_Rest - Fatal编程技术网

Django 捕获request.GET中的URL参数

Django 捕获request.GET中的URL参数,django,url,rest,Django,Url,Rest,我目前正在定义正则表达式,以便捕获URL中的参数,如教程中所述。如何作为HttpRequest对象的一部分从URL访问参数 MyHttpRequest.GET当前返回一个空的QueryDict对象 我想学习如何在没有库的情况下做到这一点,以便更好地了解Django。当URL类似于domain/search/?q=haha时,您将使用request.get.get('q','') q是您想要的参数,如果未找到q,则'是默认值 但是,如果您只是配置URLconf**,则从regex捕获的内容将作为参

我目前正在定义正则表达式,以便捕获URL中的参数,如教程中所述。如何作为
HttpRequest
对象的一部分从URL访问参数

My
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,),

这并不完全是您所要求的,但有助于在
模板中管理
查询字符串

为了澄清camflan的解释,假设您有

  • 规则
    url(regex=r'^user/(?P\w{1,50})/$”,view='views.profile_page')
  • http://domain/user/thaiyoshi/?message=Hi
URL dispatcher规则将捕获部分URL路径(此处为“user/thaiyoshi/”
),并将其与请求对象一起传递给view函数

解析查询字符串(此处为
message=Hi
),并将参数存储为
request.GET中的
QueryDict
。没有对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号,并使用日期、类别和/或slug:
    /blog/post/2008/09/30/django URL/

我想与大家分享一个可以节省您一些时间的技巧。
如果您计划在
url.py
文件中使用类似的内容:

url(r'^(?P<username>\w+)/$', views.profile_page,),
url(r'^(?P\w+/$),views.profile_页,),
这基本上意味着
www.example.com/
。请确保将其放在URL条目的末尾,否则,它很容易与下面的URL条目发生冲突,即访问其中一个会给您带来一个很好的错误:
用户匹配查询不存在。


我自己也经历过;希望有帮助

使用GET

request.GET["id"]
使用邮政

request.POST["id"]

对于只有
request
对象的情况,您可以使用
request.parser\u context['kwargs']['your\u param']
在URL看起来像这样的情况下,有两种常见的方法:

https://domain/method/?a=x&b=y
第1版:

如果特定密钥是强制性的,您可以使用:

key_a = request.GET['a']
如果键存在,则返回值
a
,如果不存在,则返回异常

第2版:

如果您的密钥是可选的:

request.GET.get('a')
你可以不用任何争论就尝试,这样不会崩溃。 所以您可以使用
try:except:
包装它,并在示例中返回
HttpResponseBadRequest()

这是一种使代码不那么复杂的简单方法,无需使用特殊的异常处理。

有人会想知道如何在文件url.py中设置路径,例如

这样我们就可以调用查询了

事实上,没有必要在文件url.py中设置这样的路由。您只需在URL.py中设置路由:

当你输入http://servername:port/domain/search/?q=CA. 查询部分“?q=CA”将自动保留在哈希表中,您可以引用该哈希表

request.GET.get('q', None).
下面是一个示例(fileviews.py)

此外,在URL中写入查询字符串时:

http://servername:port/domain/search/?q=CA
不要将查询字符串括在引号中。比如说,

http://servername:port/domain/search/?q="CA"

这些查询目前以两种方式完成。如果要访问查询参数(GET),可以查询以下内容:

http://myserver:port/resource/?status=1
request.resolver_match.kwargs.get('url_param')
如果要访问POST传递的参数,需要通过以下方式访问:

request.data.get('role', None)
view.kwargs.get('url_param')

使用“get()”访问字典(QueryDict),可以设置默认值。在上述情况下,如果未通知“状态”或“角色”,则值​​没有。

这是另一个可以实施的替代解决方案:

在URL配置中:

urlpatterns=[path('runreport/',views.get)]
在意见中:

list2=queryparams.split(&)

如果您只能访问视图对象,则可以通过以下方式获取URL路径中定义的参数:

request.data.get('role', None)
view.kwargs.get('url_param')

如果您只能访问请求对象,请使用以下命令:

http://myserver:port/resource/?status=1
request.resolver_match.kwargs.get('url_param')

在Django 3上测试。

您不妨检查request.META dictionary以访问许多有用的内容,如 路径信息,查询字符串

# for example
request.META['QUERY_STRING']

# or to avoid any exceptions provide a fallback

request.META.get('QUERY_STRING', False)

您说过它返回空的查询dict

我认为您需要调整url以接受必需或可选的arg或kwarg Django为您提供了regrex所需的全部动力,如:

url(r'^project_config/(?P<product>\w+)/$', views.foo),

url(r'^project\u config/(?P\w+/$),views.foo),

如果您不知道参数的名称并且想全部使用它们,那么可以使用
request.GET.keys()
dict(request.GET)
函数

中的“?param=”是Django识别参数的唯一方法吗?有没有一种方法可以将URLconf与HTTP.G一起使用
# for example
request.META['QUERY_STRING']

# or to avoid any exceptions provide a fallback

request.META.get('QUERY_STRING', False)

url(r'^project_config/(?P<product>\w+)/$', views.foo),