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

我的HttpRequest。GET当前返回一个空的QueryDict对象。

我想学习如何在没有库的情况下做到这一点,这样我就可以更好地了解Django。


当前回答

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

在URL配置中:

urlpatterns = [path('runreport/<str:queryparams>', views.get)]

视图中:

list2 = queryparams.split("&")

其他回答

这些查询目前有两种方式。如果您想访问查询参数(GET),您可以查询以下命令:

http://myserver:port/resource/?status=1
request.query_params.get('status', None) => 1

如果你想访问POST传递的参数,你需要通过这种方式访问:

request.data.get('role', None)

使用'get()'访问字典(QueryDict),可以设置一个默认值。在上述情况下,如果没有通知'status'或'role',则值为None。

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

在URL配置中:

urlpatterns = [path('runreport/<str:queryparams>', views.get)]

视图中:

list2 = queryparams.split("&")

当URL是domain/search/?q=哈哈,你会使用request.GET。(‘问’,”)。

Q是您想要的参数,如果没有找到Q,则“”是默认值。

然而,如果你只是配置你的URLconf**,那么你从regex捕获的信息将作为参数(或命名参数)传递给函数。

如:

(r'^user/(?P<username>\w{0,50})/$', views.profile_page,),

那么在你的视图。py中

def profile_page(request, username):
    # Rest of the method
def some_view(request, *args, **kwargs):
    if kwargs.get('q', None):
        # Do something here ..

你有两种常见的方法来做到这一点,以防你的URL看起来像这样:

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

版本1:

如果一个特定的键是强制性的,你可以使用:

key_a = request.GET['a']

如果键存在,则返回值为a,如果不存在则返回异常。

版本2:

如果你的键是可选的:

request.GET.get('a')

你可以尝试没有任何参数,这不会崩溃。 所以你可以用try: except:来包装它,并返回HttpResponseBadRequest()。 这是一种使代码不那么复杂的简单方法,不需要使用特殊的异常处理。