Django 捕获request.GET中的URL参数
我目前正在定义正则表达式,以便捕获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捕获的内容将作为参
HttpRequest
对象的一部分从URL访问参数
MyHttpRequest.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),