Django игнорировать косую черту в URL и принять параметр - PullRequest
0 голосов
/ 28 апреля 2018

привет, у меня есть такой URL:

path('api/v1/store/download/<str:ix>/', DownloadVideoAPI.as_view(), name='download'),

принимает длинную строку.

Я хочу сохранить все после download, указав вышеуказанный URL в качестве параметра.

но когда я ввожу длинную строку, содержащую косую черту, Джанго говорит, что страница не найдена, например, если при вводе "/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)

Ответы [ 3 ]

0 голосов
/ 28 апреля 2018

/api/v1/store/download/asdasd2asdsadas/asdasd приведет к странице 404, поскольку Django не может сопоставить URL, /api/v1/store/download/asdasd2asdsadas/, с маршрутом в вашем urls.py. Чтобы решить эту проблему, кроме использования ответа BugHunter , вы могли бы сначала закодировать URL-адрес вашей длинной строки, прежде чем передавать ее на свой URL-адрес.

Итак, учитывая длинную строку, "asdasd2asdsadas/asdasd", URL сначала кодирует ее до "asdasd2asdsadas%2Fasdasd". После того как вы закодировали его, ваш URL должен выглядеть следующим образом: "/api/v1/store/download/asdasd2asdsadas%2Fasdasd ".


Для кодирования URL в Python 3 вы можете использовать urllib.

import urllib

parameter = 'asdasd2asdsadas/asdasd'
encoded_string = urllib.quote(parameter, safe='')

encoded_string здесь должно быть значение "asdasd2asdsadas%2Fasdasd".

0 голосов
/ 28 апреля 2018

Ну, есть возможность добавить дополнительные параметры в запрос. Вы можете использовать метод 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'),

ref: https://docs.djangoproject.com/en/2.0/ref/urls/#django.urls.re_path

0 голосов
/ 28 апреля 2018

Просто используйте

path('api/v1/store/download/<str:ix>', DownloadVideoAPI.as_view(), name='download'),

без / в конце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...