嗨,我有这样的网址:
path('api/v1/store/download/<str:ix>/', DownloadVideoAPI.as_view(), name='download'),
它接受长串。
我想在上面的网址download
之后保留所有内容作为参数。
但是当我输入一个包含一些斜杠的长字符串时,Django说找不到页面,例如,如果输入"/api/v1/store/download/asdasd2asdsadas/asdasd"
会给我404找不到...
我该怎么做?
这是我的观点:
class DownloadVideoAPI(APIView):
def get(self, request, ix):
pre = ix.split(",")
hash = pre[0]
dec = pre[1]
de_hash = decode_data(hash, dec)
答案 0 :(得分:0)
只需使用
path('api/v1/store/download/<str:ix>', DownloadVideoAPI.as_view(), name='download'),
最后没有/
。
答案 1 :(得分:0)
/api/v1/store/download/asdasd2asdsadas/asdasd
会生成404
页面,因为Django无法将网址/api/v1/store/download/asdasd2asdsadas/
映射到urls.py
中的路线。要解决此问题,除了使用BugHunter的answer之外,您可以先对长字符串进行URL编码,然后再将其传递给您的网址。
因此,给定长字符串"asdasd2asdsadas/asdasd"
,URL会先将其编码为"asdasd2asdsadas%2Fasdasd"
。对代码进行编码后,您的网址现在应该显示为"/api/v1/store/download/asdasd2asdsadas%2Fasdasd
“。
要在Python 3中进行URL编码,您可以使用urllib
。
import urllib
parameter = 'asdasd2asdsadas/asdasd'
encoded_string = urllib.quote(parameter, safe='')
encoded_string
此处应具有值"asdasd2asdsadas%2Fasdasd"
。
答案 2 :(得分:0)
嗯,可以在请求中添加额外的参数。你可以使用re_path方法。
# urls.py
from django.urls import re_path
re_path(r'api/v1/store/download/(?P<ix>\w+)/', DownloadVideoAPI.as_view(), name='download'),
参考:https://docs.djangoproject.com/en/2.0/ref/urls/#django.urls.re_path