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

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

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


当前回答

这并不是您所需要的,但是这段代码有助于管理模板中的query_strings。

其他回答

你不妨检查一下请求。META字典可以访问很多有用的东西 PATH_INFO, QUERY_STRING

# for example
request.META['QUERY_STRING']

# or to avoid any exceptions provide a fallback

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

你说它返回空的查询字典

我认为你需要调整你的url接受必要或可选的args或kwargs Django为你提供了处理后悔的所有能力,比如:

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

更多信息请访问django-optional-url-parameters

当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

views.py

从rest_framework。response import响应 Def update_product(请求,pk): 返回响应({“pk”:pk})

Pk表示主键。

urls . py

从产品。视图导入update_product django。url导入路径 Urlpatterns = [ …, 路径(更新/产品/ < int: pk >”,update_product) ]

似乎更推荐使用request.query_params。例如,

当URL是domain/search/?Q =哈哈,你会使用request.query_params。(“问”,没有一个)

https://www.django-rest-framework.org/api-guide/requests/

”的请求。query_params是request.GET的同义词。

为了代码内部清晰,我们建议使用request。query_params而不是Django标准的request.GET。这样做有助于让你的代码更加正确和明显——任何HTTP方法类型都可能包含查询参数,而不仅仅是GET请求。”

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

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

版本1:

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

key_a = request.GET['a']

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

版本2:

如果你的键是可选的:

request.GET.get('a')

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