Обработка html специальных символов в django URL - PullRequest
0 голосов
/ 04 мая 2020

Это мой django вид остального фреймворка:

class NewsArticleViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = []
    serializer_class = NewsArticleSerializer
    pagination_class = None

    def get_queryset(self):
        slug = self.request.query_params.get('news', None)
        if slug:
            news = News.objects.filter(slug=slug)
            return news
        return []

, который отлично работает, за исключением случаев, когда я передаю html специальный символ в URL, как этот:

?news=example/2020/4/4/'53-lorem-ipsum'

это ничего не возвращает; потому что self.request.query_params.get('news', None) разбирает как example/2020/4/4/ не полная строка example/2020/4/4/'53-lorem-ipsum'

Вот значение self.request.query_params для отладки:

<QueryDict: {'news': ['example/2020/4/4/'], 'apos': ['', ''], '53-lorem-ipsum': ['']}>

Как решить эту проблему?

1 Ответ

1 голос
/ 04 мая 2020

Это не относится к Django, символ «&» используется для разделения параметров строки запроса в запросах http. Поэтому, когда в параметре есть символ «&», серверные приложения думают, что это начало следующего параметра.

Вам необходимо кодировать параметр строки запроса перед его отправкой на сервер. Способ сделать это будет меняться в зависимости от платформы, с которой вы отправляете запрос, но на Javascript вы можете использовать функцию encodeURIComponent .

encodeURIComponent('example/2020/4/4/&apos;53-lorem-ipsum&apos;')

return "example% 2F2020% 2F4% 2F4% 2F% 26apos% 3B53-lorem-ipsum% 26apos% 3B "

Ваше приложение Django должно иметь возможность проанализировать его как один параметр.

...