django Serializerプログレッシブ使用方法詳細
11596 ワード
Serializerプログレッシブ
Serializerを定義します
1.定義方法
Django REST frame eworkのSerializerはクラスを使って定義します。frame ework.serializer.Serializer。
例えば、私たちはもう一つのデータベースモデルタイプのBookInfoを持っています。
2.フィールドとオプション
通常のフィールドタイプ:
フィールド
フィールドの作成方法
Boolean Field
Boolean Field()
Null Boolean Field
Null Boolean Field()
Char Field
Char Field(max_)length=None,min_length=None、allow_blank=False、trim_white espace=True)
Email Field
Email Field(max_)length=None,min_length=None、allow_blank=False)
RegexField
RegexField(regex,max_length=None,min_length=None、allow_blank=False)
SlugField
SlugField(maxlength=50,min_length=None、allow_blank=False)
正規フィールド、正規モード[a-zA-Z 0-9-]+を検証します。
URL Field
URL Field(max_length=200,min_length=None、allow_blank=False)
UUUIDField
UUUIDField(format='hex_verbose
フォーマット:
1)'hex_verbose'は、例えば「5 cc 0 e 9 a 5-5 ffa-654 b-cee 0-1238041 fb 31 a」のようです。
2)'hex'は「5 c e 0 a 55 ffa 654 bcee 01238041 fb 31 a」のようです。
3)'int'-例えば:「1234545114 123567812312313131334515145114」
4)'urn'如:“urn:uuid:5 c e 0 a 5-5 ffa-654 b-cee 0-1238041 fb 31 a”
IPAddress Field
IPAddress Field(protocol='both)、unpack_ipv 4=False、*options)
Integer Field
Integer Field(max_value=None,min_value=None)
Flooat Field
Float Field(max_value=None,min_value=None)
Decimal Field
Decimal Field(max_digits,decimal_placeto_string=None、max_value=None,min_value=None)
max_digits:最大桁数
decimal_パルクス:小数点以下の位置
DateTimeField
DateTimeField(format=api_)settings.DATETIME_FOREMAT,input_フォーマット=None)
DateField
DateField(format=api_settings.DATE_FOREMAT,input_フォーマット=None)
TimeField
TimeField(format=api_settings.TIME_FOREMAT,input_フォーマット=None)
Duration Field
Duration Field()
Choice Field
Choice Field(checes)
checesとDjangoの使い方は同じです。
Multiple Choice Field
Multiple Choice Field(checes)
FileField
FileField(max_length=None、allow_empty_file=False、use_url=UP LOADED_FILES_USE_URL)
ImageField
ImageField(max_length=None、allow_empty_file=False、use_url=UP LOADED_FILES_USE_URL)
ListField
ListField(child=、min_length=None、max_length=None)
DictField
DictField(child=)
オプションのパラメータ:
パラメータ名
作用
max_length
最大長さ
min.lenght
最小長さ
allow_ブラック
空で許可するかどうか
trim_ホワイトパス
空白文字を切断しますか?
max_value
最小値
min.value
最大値
共通パラメータ:
パラメータ名
説明
read_.only
このフィールドは、プログレッシブ出力にのみ使用されることを示し、デフォルトのFalse
write_only
このフィールドは、アンチプログレッシブ入力にのみ使用されることを示し、デフォルトのFalse
required
このフィールドは、デフォルトのTrueを入力する必要があります。
default
アンチプログレッシブ時に使用するデフォルト値
allow_null
フィールドがNoneに入ることを許可しているかどうか、デフォルトのFalse
validators
このフィールドで使用する検証器
error_メッセージ
エラー番号とエラー情報を含む辞書
label
APIページをHTMLで表示する場合のフィールド名
help_テキスト
HTMLでAPIページを表示する場合、表示されるフィールドヘルプメッセージ情報
3.Serializerオブジェクトを作成する
Serializerクラスを定義すれば、Serializerオブジェクトを作成できます。
Serializerの構造方法は、
1)プログレッシブに使用する場合、モデル類のオブジェクトをinstanceパラメータに導入する
2)アンチプログレッシブに使用すると、デタパラメータに逆プログレッシブになるデータが入ってきます。
3)instanceとdataパラメータの他に、Serializerオブジェクトを構築する際に、contextパラメータで追加データを追加することができます。
プログレッシブ使用
私たちはdjango shellでプログレッシブの使用を学びます。
1)まず図書の対象を調べます。
データ属性により、プログレッシブ後のデータを取得できます。
順序付けが必要なデータに他の関連オブジェクトが含まれている場合は、関連対象データの順序付けには指定が必要です。
例えば、ヒーローデータのプロシージャを定義するとき、外部キーhbookフィールドはどのようにプログレッシブされますか?
まず、HeroInfoSerialzerを除いたキーフィールドの他の部分を定義します。
1)Primary KeyRelated Field
このフィールドは、関連するオブジェクトのプライマリキーとして順序付けされます。はread_を含む。only=Trueパラメータの場合、このフィールドは逆順序として使用できなくなります。 を使用します。にquerysetパラメータが含まれている場合、逆プログレッシブ時のパラメータチェックとして を使用します。
使用効果:
このフィールドは、関連するオブジェクトの文字列表示方法として順序付けされます。str方法の戻り値)
''id':6,hname':'喬峰',hgender':1,hcompment':'降龍十八掌',hbook':'天龍八部''
3)Hyperlinked Related Field
このフィールドは、関連するオブジェクトデータを取得するインターフェースリンクとして順序付けされます。
効果を使う
''id':6,hname':'喬峰',hgender':1,hcompment':'降龍十八掌','hbook':'http://127.0.0.1:8000/books/2/'。
私たちはまだビューを定義していません。この方法はもう見せません。
4)SlugRelated Field
このフィールドは、関連するオブジェクトの指定フィールドデータとして順序付けされます。
効果を使う
{id':6,hname':'喬峰',hgender':1,hcompment':'降龍十八掌',hbook':datetime.date(1986,7,24)}
5)関連するオブジェクトを使用するプログレッシブ
''id':6,hname':'喬峰',hgender':1,'hcommment':'降龍十八掌','hbook':Orderedict(',2),('btitle',天龍八部')te',1986-07-24'),(imebred',40),(comple',mute',mute',mute),(36),'
6)to_を書き直すrepresentation方法
プログレッシブの各フィールドは、実際にはこのフィールドタイプのto_である。representation方法でフォーマットを決定する場合、この方法を書き換えることでフォーマットを決定することができます。
注意してくださいrepresentations方法は、関連するオブジェクトフォーマットを制御するだけではなく、各プログレッシブフィールドタイプに適用されます。
新しい関連フィールドをカスタマイズ:
''id':6,hname':'喬峰',hgender':1,hcompment':'降龍十八掌',hbook':'2天龍八部''
パラメータ
関連するオブジェクトデータが1つだけではなく、複数のデータを含んでいる場合、ブックブックBook Infoデータを順次列挙したい場合、各BookInfoオブジェクトに関連するヒーローHero Infoオブジェクトは複数あるかもしれません。この場合、関連フィールドタイプの指定は上記のようないくつかの方法が適用されます。ただし、関連フィールドを宣言する際には、many=Trueパラメータを追加すれば良いです。
ここではPrimary KeyRelatedタイプのみを例に挙げます。他は同じです。
BookInfoSerializerに関連フィールドを追加します。
Serializerを定義します
1.定義方法
Django REST frame eworkのSerializerはクラスを使って定義します。frame ework.serializer.Serializer。
例えば、私たちはもう一つのデータベースモデルタイプのBookInfoを持っています。
class BookInfo(models.Model):
btitle = models.CharField(max_length=20, verbose_name=' ')
bpub_date = models.DateField(verbose_name=' ', null=True)
bread = models.IntegerField(default=0, verbose_name=' ')
bcomment = models.IntegerField(default=0, verbose_name=' ')
image = models.ImageField(upload_to='booktest', verbose_name=' ', null=True)
このモデルクラスにプログレッシブを提供したいです。次のように定義できます。
class BookInfoSerializer(serializers.Serializer):
""" """
id = serializers.IntegerField(label='ID', read_only=True)
btitle = serializers.CharField(label=' ', max_length=20)
bpub_date = serializers.DateField(label=' ', required=False)
bread = serializers.IntegerField(label=' ', required=False)
bcomment = serializers.IntegerField(label=' ', required=False)
image = serializers.ImageField(label=' ', required=False)
注意:serializerはデータベースモデル類のみの定義ではなく、非データベースモデル類のデータ定義でもあります。serializerはデータベースから独立した存在です。2.フィールドとオプション
通常のフィールドタイプ:
フィールド
フィールドの作成方法
Boolean Field
Boolean Field()
Null Boolean Field
Null Boolean Field()
Char Field
Char Field(max_)length=None,min_length=None、allow_blank=False、trim_white espace=True)
Email Field
Email Field(max_)length=None,min_length=None、allow_blank=False)
RegexField
RegexField(regex,max_length=None,min_length=None、allow_blank=False)
SlugField
SlugField(maxlength=50,min_length=None、allow_blank=False)
正規フィールド、正規モード[a-zA-Z 0-9-]+を検証します。
URL Field
URL Field(max_length=200,min_length=None、allow_blank=False)
UUUIDField
UUUIDField(format='hex_verbose
フォーマット:
1)'hex_verbose'は、例えば「5 cc 0 e 9 a 5-5 ffa-654 b-cee 0-1238041 fb 31 a」のようです。
2)'hex'は「5 c e 0 a 55 ffa 654 bcee 01238041 fb 31 a」のようです。
3)'int'-例えば:「1234545114 123567812312313131334515145114」
4)'urn'如:“urn:uuid:5 c e 0 a 5-5 ffa-654 b-cee 0-1238041 fb 31 a”
IPAddress Field
IPAddress Field(protocol='both)、unpack_ipv 4=False、*options)
Integer Field
Integer Field(max_value=None,min_value=None)
Flooat Field
Float Field(max_value=None,min_value=None)
Decimal Field
Decimal Field(max_digits,decimal_placeto_string=None、max_value=None,min_value=None)
max_digits:最大桁数
decimal_パルクス:小数点以下の位置
DateTimeField
DateTimeField(format=api_)settings.DATETIME_FOREMAT,input_フォーマット=None)
DateField
DateField(format=api_settings.DATE_FOREMAT,input_フォーマット=None)
TimeField
TimeField(format=api_settings.TIME_FOREMAT,input_フォーマット=None)
Duration Field
Duration Field()
Choice Field
Choice Field(checes)
checesとDjangoの使い方は同じです。
Multiple Choice Field
Multiple Choice Field(checes)
FileField
FileField(max_length=None、allow_empty_file=False、use_url=UP LOADED_FILES_USE_URL)
ImageField
ImageField(max_length=None、allow_empty_file=False、use_url=UP LOADED_FILES_USE_URL)
ListField
ListField(child=、min_length=None、max_length=None)
DictField
DictField(child=)
オプションのパラメータ:
パラメータ名
作用
max_length
最大長さ
min.lenght
最小長さ
allow_ブラック
空で許可するかどうか
trim_ホワイトパス
空白文字を切断しますか?
max_value
最小値
min.value
最大値
共通パラメータ:
パラメータ名
説明
read_.only
このフィールドは、プログレッシブ出力にのみ使用されることを示し、デフォルトのFalse
write_only
このフィールドは、アンチプログレッシブ入力にのみ使用されることを示し、デフォルトのFalse
required
このフィールドは、デフォルトのTrueを入力する必要があります。
default
アンチプログレッシブ時に使用するデフォルト値
allow_null
フィールドがNoneに入ることを許可しているかどうか、デフォルトのFalse
validators
このフィールドで使用する検証器
error_メッセージ
エラー番号とエラー情報を含む辞書
label
APIページをHTMLで表示する場合のフィールド名
help_テキスト
HTMLでAPIページを表示する場合、表示されるフィールドヘルプメッセージ情報
3.Serializerオブジェクトを作成する
Serializerクラスを定義すれば、Serializerオブジェクトを作成できます。
Serializerの構造方法は、
Serializer(instance=None, data=empty, **kwarg)
説明:1)プログレッシブに使用する場合、モデル類のオブジェクトをinstanceパラメータに導入する
2)アンチプログレッシブに使用すると、デタパラメータに逆プログレッシブになるデータが入ってきます。
3)instanceとdataパラメータの他に、Serializerオブジェクトを構築する際に、contextパラメータで追加データを追加することができます。
serializer = AccountSerializer(account, context={'request': request})
contextパラメータに付加されたデータは、Serializerオブジェクトのcontext属性で取得できます。プログレッシブ使用
私たちはdjango shellでプログレッシブの使用を学びます。
python manage.py shell
1基本使用1)まず図書の対象を調べます。
from booktest.models import BookInfo
book = BookInfo.objects.get(id=2)
2)プログレッシブオブジェクトを作成する
from booktest.serializers import BookInfoSerializer
serializer = BookInfoSerializer(book)
3)シーケンスデータの取得データ属性により、プログレッシブ後のデータを取得できます。
serializer.data
# {'id': 2, 'btitle': ' ', 'bpub_date': '1986-07-24', 'bread': 36, 'bcomment': 40, 'image': None}
4)複数のデータが含まれているクエリセットQuerySetをプログレッシブにするなら、may=Trueパラメータを追加して説明することができます。
book_qs = BookInfo.objects.all()
serializer = BookInfoSerializer(book_qs, many=True)
serializer.data
# [OrderedDict([('id', 2), ('btitle', ' '), ('bpub_date', '1986-07-24'), ('bread', 36), ('bcomment', 40), ('image', N]), OrderedDict([('id', 3), ('btitle', ' '), ('bpub_date', '1995-12-24'), ('bread', 20), ('bcomment', 80), ('image'ne)]), OrderedDict([('id', 4), ('btitle', ' '), ('bpub_date', '1987-11-11'), ('bread', 58), ('bcomment', 24), ('ima None)]), OrderedDict([('id', 5), ('btitle', ' '), ('bpub_date', '1988-01-01'), ('bread', 10), ('bcomment', 10), ('im', 'booktest/xiyouji.png')])]
2連結オブジェクトの入れ子順序化順序付けが必要なデータに他の関連オブジェクトが含まれている場合は、関連対象データの順序付けには指定が必要です。
例えば、ヒーローデータのプロシージャを定義するとき、外部キーhbookフィールドはどのようにプログレッシブされますか?
まず、HeroInfoSerialzerを除いたキーフィールドの他の部分を定義します。
class HeroInfoSerializer(serializers.Serializer):
""" """
GENDER_CHOICES = (
(0, 'male'),
(1, 'female')
)
id = serializers.IntegerField(label='ID', read_only=True)
hname = serializers.CharField(label=' ', max_length=20)
hgender = serializers.ChoiceField(choices=GENDER_CHOICES, label=' ', required=False)
hcomment = serializers.CharField(label=' ', max_length=200, required=False, allow_null=True)
関連フィールドには、以下のような方法があります。1)Primary KeyRelated Field
このフィールドは、関連するオブジェクトのプライマリキーとして順序付けされます。
hbook = serializers.PrimaryKeyRelatedField(label=' ', read_only=True)
hbook = serializers.PrimaryKeyRelatedField(label=' ', queryset=BookInfo.objects.all())
フィールドを指定するときはread_を含む必要があります。only=Trueまたはquerysetパラメータ:使用効果:
from booktest.serializers import HeroInfoSerializer
from booktest.models import HeroInfo
hero = HeroInfo.objects.get(id=6)
serializer = HeroInfoSerializer(hero)
serializer.data
# {'id': 6, 'hname': ' ', 'hgender': 1, 'hcomment': ' ', 'hbook': 2}
2)StringRelated Fieldこのフィールドは、関連するオブジェクトの文字列表示方法として順序付けされます。str方法の戻り値)
hbook = serializers.StringRelatedField(label=' ')
効果を使う''id':6,hname':'喬峰',hgender':1,hcompment':'降龍十八掌',hbook':'天龍八部''
3)Hyperlinked Related Field
このフィールドは、関連するオブジェクトデータを取得するインターフェースリンクとして順序付けされます。
hbook = serializers.HyperlinkedRelatedField(label=' ', read_only=True, view_name='books-detail')
必ずviewを明示しなければならないnameパラメータは、DRFがビューの名前に従ってルートを探し、さらに完全なURLに接続するためです。効果を使う
''id':6,hname':'喬峰',hgender':1,hcompment':'降龍十八掌','hbook':'http://127.0.0.1:8000/books/2/'。
私たちはまだビューを定義していません。この方法はもう見せません。
4)SlugRelated Field
このフィールドは、関連するオブジェクトの指定フィールドデータとして順序付けされます。
hbook = serializers.SlugRelatedField(label=' ', read_only=True, slug_field='bpub_date')
スラグ.fieldは、関連するオブジェクトを使用するフィールドを指定します。効果を使う
{id':6,hname':'喬峰',hgender':1,hcompment':'降龍十八掌',hbook':datetime.date(1986,7,24)}
5)関連するオブジェクトを使用するプログレッシブ
hbook = BookInfoSerializer()
効果を使う''id':6,hname':'喬峰',hgender':1,'hcommment':'降龍十八掌','hbook':Orderedict(',2),('btitle',天龍八部')te',1986-07-24'),(imebred',40),(comple',mute',mute',mute),(36),'
6)to_を書き直すrepresentation方法
プログレッシブの各フィールドは、実際にはこのフィールドタイプのto_である。representation方法でフォーマットを決定する場合、この方法を書き換えることでフォーマットを決定することができます。
注意してくださいrepresentations方法は、関連するオブジェクトフォーマットを制御するだけではなく、各プログレッシブフィールドタイプに適用されます。
新しい関連フィールドをカスタマイズ:
class BookRelateField(serializers.RelatedField):
""" """
def to_representation(self, value):
return 'Book: %d %s' % (value.id, value.btitle)
hbookを指定するのはBookRelateFieldタイプです。
hbook = BookRelateField(read_only=True)
効果を使う''id':6,hname':'喬峰',hgender':1,hcompment':'降龍十八掌',hbook':'2天龍八部''
パラメータ
関連するオブジェクトデータが1つだけではなく、複数のデータを含んでいる場合、ブックブックBook Infoデータを順次列挙したい場合、各BookInfoオブジェクトに関連するヒーローHero Infoオブジェクトは複数あるかもしれません。この場合、関連フィールドタイプの指定は上記のようないくつかの方法が適用されます。ただし、関連フィールドを宣言する際には、many=Trueパラメータを追加すれば良いです。
ここではPrimary KeyRelatedタイプのみを例に挙げます。他は同じです。
BookInfoSerializerに関連フィールドを追加します。
class BookInfoSerializer(serializers.Serializer):
""" """
id = serializers.IntegerField(label='ID', read_only=True)
btitle = serializers.CharField(label=' ', max_length=20)
bpub_date = serializers.DateField(label=' ', required=False)
bread = serializers.IntegerField(label=' ', required=False)
bcomment = serializers.IntegerField(label=' ', required=False)
image = serializers.ImageField(label=' ', required=False)
heroinfo_set = serializers.PrimaryKeyRelatedField(read_only=True, many=True) #
使用効果:
from booktest.serializers import BookInfoSerializer
from booktest.models import BookInfo
book = BookInfo.objects.get(id=2)
serializer = BookInfoSerializer(book)
serializer.data
# {'id': 2, 'btitle': ' ', 'bpub_date': '1986-07-24', 'bread': 36, 'bcomment': 40, 'image': Non
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。