Я пытаюсь сделать 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"
Переменная name
может включать "|" условное обозначение.
Когда я открываю URL-адрес 127.0.0.1:8000/api/edit/ABCD|1234
в моем браузере, где ABCD|1234
- это переменная name
, URL-адрес автоматически кодирует его, и он становится 127.0.0.1:8000/api/edit/ABCD%7C1234
.
Он не может найти это имя в моей базе данных. Как я могу его расшифровать и получить данные из моей базы данных?
Django расшифрует URL за вас. Когда вы обращаетесь к self.kwargs['name']
, это будет 'ABCD|1234'
, а не 'ABCD%7C1234'
.
Однако у вас есть отдельная проблема. Ваша текущая группа регулярных выражений [\w-]+
будет соответствовать только прописным A-Z, строчным a-z, цифрам 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")
Большое спасибо! Это мне действительно помогло.
Предлагаю просто добавить
|
в список разрешенных символов:r'^edit/(?P<name>[\w|-]+)/$'