Джанго: Как декодировать URL, чтобы получить значение переменной? - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь сделать Django API.

Вот код в urls.py

url(r'^edit/(?P<name>[\w-]+)/$', UpdateView.as_view(), name="update")

views.py

class UpdateView(RetrieveUpdateView):
     queryset = Book.objects.all()
     serializer_class = BookUpdateSerializer
     lookup_field = "name"

The name переменная может включать '|'символ.

Когда я открываю URL 127.0.0.1:8000/api/edit/ABCD|1234 в моем браузере, где ABCD|1234 - это переменная name, URL автоматически закодирует ее, и она станет 127.0.0.1:8000/api/edit/ABCD%7C1234.

Невозможно найти это имя в моей базе данных.Как я могу декодировать его и получить данные из моей базы данных?

1 Ответ

0 голосов
/ 24 октября 2018

Django расшифрует URL для вас.При доступе к self.kwargs['name'] это будет 'ABCD|1234', а не 'ABCD%7C1234'.

Однако у вас есть отдельная проблема.Ваша текущая группа регулярных выражений [\w-]+ будет соответствовать только заглавным буквам AZ, строчным AZ, цифрам 0-9, подчеркиванию _ и дефису -.Вам придется изменить это, если вы хотите сопоставить символы типа |.

Вы можете просто добавить | в группу:

# put | before - otherwise you have to escape hypen with \-
url(r'^edit/(?P<name>[\w|-]+)/$', UpdateView.as_view(), name="update")

Или, если вы хотите добавить в группу много других символов, вы можете сопоставить что угодно, кроме косой черты.с:

url(r'^edit/(?P<name>[^/]+)/$', UpdateView.as_view(), name="update")
...