gpt4 book ai didi

python - 将 URL 作为 Django URL 中的参数传递

转载 作者:行者123 更新时间:2023-12-02 11:47:03 25 4
gpt4 key购买 nike

我正在开发一个 Django(2) 项目,在该项目中我需要将 URL 作为 Django URL 中的参数传递,这是我尝试过的:

urls.py:

urlpatterns = [
path('admin/', admin.site.urls),
url(r'^api/(?P<address>.*)/$', PerformImgSegmentation.as_view()),
]

views.py:

class PerformImgSegmentation(generics.ListAPIView):
def get(self, request, *args, **kwargs):
img_url = self.kwargs.get('address')
print(img_url)
print('get request')
return 'Done'

但是它不起作用,我通过 postman 传递了一个名称为address的参数,但失败了。它返回此错误:

Not Found: /api/ [05/Sep/2018 15:28:06] "GET /api/ HTTP/1.1" 404 2085

最佳答案

Django 2.0及更高版本现在使用path func 构造函数来指定 URL。我不确定是否仍然向后兼容;你可以用一个简单的例子来尝试一下。但是,如果您开始编写应用程序,则应该使用 path :

path('api/<str:encoded_url>/', view_action)

为了避免与应用程序中查看的标准路径混淆,我不建议使用 path转换器而不是 str (前者可以匹配 / ,而另一个则不能)。

您可以从 url 获得更多转换帮助至path有了这个article .

第二步,获取encoded_url作为 View 中的参数。您需要对其进行解码:要在 get url 中传递 url,您可以使用 ASCII 编码来替换某些保留字符(例如,正斜杠)。

您可以使用urllib轻松编码和解码网址(还有其他模块)。对于Python 3.7语法如下(docs here)

>>> urllib.parse.quote("http://www.google.com")
'http%3A//www.google.com'
>>> urllib.parse.unquote('http%3A//www.google.com')
'http://www.google.com'

记住:如果您传递网址而不加引号,它将不匹配:您不接受与该路径表达式的斜杠匹配。 (编辑:引用方法默认不转换正斜杠,为此您需要传递:quote(<str>, safe='')

例如,您的 GET 调用应如下所示:/api/http%3A%2F%2Fwww.google.com 。然而,如果您将 URL 作为 get 参数传递,并且在路径中您只关心可读性(例如 /api/name_to_my_method?url=http%3A%2F%2Fwww.google.com ),那就更好了。路径工程对于可读性很重要,并且传递引用的 URL 通常不是最佳实践(尽管完全有可能)。

关于python - 将 URL 作为 Django URL 中的参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52188784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com