68317


Django REST Frameworkにおいて，以下のAPIを構築しました．

## views.py

[code]

    class GetAPIView(views.APIView):
    
        def get(self, request):
            return Response(request.GET)
    
[/code]

## urls.py

[code]

    urlpatterns = [
        re_path(r'^test.*', views.GetAPIView.as_view()),
    ]
    
[/code]

ここで以下のリクエストを送りたいです．

[code]

    curl 'http://localhost:8000/test?100+10'
    
[/code]

# 実行結果

### 想定したレスポンス

[code]

    {
        "100+10": ""
    }
    
[/code]

### 実際のレスポンス

[code]

    {
        "100 10": ""
    }
    
[/code]

+を扱うためには，どうすればよいでしょうか？


CC BY-SA 4.0
2020-07-05T20:05:26.263
68315
2023-02-17T06:31:18.450
2023-02-17T06:31:18.450
3060
40942
question
python django django-rest-framework
Django REST Framework: クエリパラメータに+を使いたい．


URLにおいて`+`は特別な意味(スペースとして扱われます)を持ちます．`+`など，特別な意味を持つ文字を元の文字のままサーバーに伝えたい場合は[パーセントエンコーディング](https://developer.mozilla.org/ja/docs/Glossary/percent-
encoding)をする必要があります．  
たとえば`+`は`%2B`に置換されるので，`?100+10`は`?100%2B10`のようになります．

RFC
3986で定義されているこれは多くの言語で標準で実装されていることがあり，たとえばPythonでは[`urllib.parse`](https://docs.python.org/ja/3/library/urllib.parse.html)で利用できます．(つまりはdjangoでは内部的に`urllib.parse.unquote_plus`に相当することをやっているとも考えられます)

curlでは`-G`と`--data-urlencode`を併用することでURLエンコードをおこなったGETクエリが付与できるようです．
<https://unix.stackexchange.com/a/86737>


CC BY-SA 4.0
2020-07-05T21:34:15.513
68317
2020-07-05T21:34:15.513
2376
68315
answer