1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DjangoのSerializerのフィールドには「trim_whitespace」というオプションがある。
削除してくれるのは「whitespace」=「空白」=「スペースだけ」だと思っていたが、「改行」も削除されたので調べてみた。
その結果、「空白」=「スペースだけ」というのは盛大に間違っていてた。

1. trim_whitespaceは、空白を削除する

CharField
...省略...
trim_whitespace - If set to True then leading and trailing whitespace is trimmed. Defaults to True.
Serializer fields - Django REST framework

2. trim_whitespaceは、strip()を使っている

引用元 : django-rest-framework/rest_framework/fields.py at master · encode/django-rest-framework · GitHub

class CharField(Field):
    # ...省略...
    def to_internal_value(self, data):
        # ...省略...
        value = str(data)
        return value.strip() if self.trim_whitespace else value

3. Pythonのstrip()は、引数なしで空白文字を除去する

str.strip([chars])
文字列の先頭および末尾部分を除去したコピーを返します。引数 chars は除去される文字集合を指定する文字列です。 chars が省略されるか None の場合、空白文字が除去されます。 chars 文字列は接頭語でも接尾語でもなく、そこに含まれる文字の組み合わせ全てがはぎ取られます:
組み込み型 — Python 3.12.4 ドキュメント

4. 空白には「タブ」「改行」なども含まれていた

空白とは?はisspace()で確認でき、その説明には「タブ」「改行」が含まれると書いてあった。

bytes.isspace()
bytearray.isspace()
シーケンスが空でなく、かつ全てのバイト値が ASCII 空白文字である場合は True を、そうでなければ False を返します。ここでの ASCII 空白文字とはシーケンス b' \t\n\r\x0b\f' に含まれるバイト値です (半角スペース、タブ、ラインフィード、キャリッジリターン、垂直タブ、フォームフィード) 。
組み込み型 — Python 3.14.0a0 ドキュメント

5. 正規表現でも\sは「改行」を含む

\s
Unicode (str) パターンでは:
Unicode 空白文字 (これは [ \t\n\r\f\v] その他多くの文字、例えば多くの言語におけるタイポグラフィ規則で定義されたノーブレークスペースなどを含みます) にマッチします。
re --- 正規表現操作 — Python 3.12.4 ドキュメント

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?