Serializers
serializers λ querysetκ³Ό λͺ¨λΈ μΈμ€ν΄μ€μ κ°μ 볡μ‘ν λ°μ΄ν°λ₯Ό JSON, XML λλ λ€λ₯Έ 컨ν
μΈ μ νμΌλ‘ μ½κ² λ λλ§ν μ μλ python κΈ°λ³Έ λ°μ΄ν° μ νμΌλ‘ λ³νν΄μ€λ€. λν deserialization μ μ 곡νμ¬, λ€μ΄μ€λ λ°μ΄ν°μ μ ν¨μ±μ μ²μ νμΈν νμ ꡬ문 λΆμμ΄ λ λ°μ΄ν°λ₯Ό λ³΅ν© νμμΌλ‘ λ€μ λ³νν μ μλ€.
REST νλ μμν¬μ serializers λ Djangoμ Form, modelForm ν΄λμ€μ λ§€μ° μ μ¬νκ² μλνλ€. serializers λ ModelSerializer, Serializer ν΄λμ€λ₯Ό μ 곡νλ€.
μ¬μ©μ μ djangorestframework κ° μ€μΉλμ΄μλμ§ νμΈν΄μΌνλ€.
$ pip list
Package Version
------------------- -------
Django 2.1.7
djangorestframework 3.9.2
pip 19.0.3
pytz 2018.9
setuptools 40.6.2Serialzers μ μΈ
κ°λ¨ν μλ₯Όλ€κΈ° μν΄μ κ°μ²΄ νκ°λ₯Ό μμ±νλ€.
# models.py
from django.db import models
from datetime import datetime
# Create your models here.
class Comment(models.Model):
email = models.CharField(max_length=100,blank=False)
content = models.TextField()
created_at = models.DateTimeField(default=datetime.now)comment κ°μ²΄μ ν΄λΉνλ λ°μ΄ν°λ₯Ό serializer, deserializerν ν μ μλ serializerλ₯Ό μ μΈνλ€.
Serializing Objects
μμ±ν Serializer ν΄λμ€λ₯Ό μ¬μ©νμ¬ ν΄λΉ κ°μ²΄λ₯Ό serializingν μ μλ€.
μ΄ μμ μμλ λͺ¨λΈ μΈμ€ν΄μ€λ₯Ό νμ΄μ¬ κΈ°λ³Έ λ°μ΄ν° μ νμΌλ‘ λ³νν κ²μ΄λ€.
JSON λ°μ΄ν°λ‘ λ³ννκΈ° μν΄μλ JSONRendererλ₯Ό μ΄μ©ν΄ jsonμΌλ‘ λ°κΏμ€λ€.
Deserializing Objects
serializingκ³Ό μ μ¬νλ€. μ°μ jsonλ°μ΄ν°λ₯Ό νμ΄μ¬ λ°μ΄ν° νμμΌλ‘ parsingν νμ κΈ°λ³Έ λ°μ΄ν°λ₯Ό κ²μ¦λ λ°μ΄ν°λ‘ 볡μνλ€.
Return Instance
μμ ν κ°μ²΄ μΈμ€ν΄μ€λ₯Ό λ°ννκΈ° μν΄μλ create(), update() λ©μλλ₯Ό ꡬνν΄μ object instance λ°νμ΄ κ°λ₯νλ€.
κ°μ²΄ μΈμ€ν΄μ€κ° λͺ¨λΈκ³Ό μΌμΉνλ κ²½μ°μλ μλμ κ°μ΄ κ°μ²΄λ₯Ό λ°μ΄ν°λ² μ΄μ€μ μ μ₯λλλ‘ ν΄μΌνλ€.
λ°μ΄ν°λ deserializingν λ .save()λ₯Ό νΈμΆνμ¬ μ ν¨μ±μ΄ κ²μ¬λ λ°μ΄ν°λ₯Ό κΈ°λ°μΌλ‘ κ°μ²΄ μΈμ€ν΄μ€λ₯Ό λ°νν μ μλ€.
μ¬κΈ°μ save()λ instanceκ° μ‘΄μ¬νλ©΄ updateλ₯Ό μ‘΄μ¬νμ§μμΌλ©΄ createλ₯Ό ν΄μ€λ€.
μΈμ€ν΄μ€λ₯Ό μ μ₯νλ μμ μ λ·° μ½λκ° λ°μ΄ν°λ₯Ό μΆκ°ν μ μμ΄μΌνλ©°, μ΄ μΆκ° λ°μ΄ν°μλ λ€λ₯Έ μ λ³΄κ° ν¬ν¨λ μ μλ€.
μΆκ°λ λ°μ΄ν°λ .create() νΉμ .update()κ° νΈμΆλ λ validated_dataμ ν¬ν¨λλ€.
Validation
λ°μ΄ν°λ₯Ό deserializerν λ μ ν¨μ±μ΄ κ²μ¦λ λ°μ΄ν°μ μ κ·ΌνκΈ° μ μ is_valid() λ₯Ό νΈμΆνκ±°λ κ°μ²΄ μΈμ€ν΄μ€λ₯Ό μ μ₯ν΄μΌνλ€.
λ§μ½μ is_valid()κ° FalseλΌλ©΄, .errors()λ₯Ό ν΅ν΄μ κ²°κ³Ό μ€λ₯λ©μΈμ§λ₯Ό νμΈν μ μλ€.
raise_exception=True νλκ·Έλ₯Ό μ¬μ©ν΄ serializers.validationError μμΈλ₯Ό λ°μμν¬ μ μλ€.
Field λ 벨 κ²μ¦
validate_field
serializer μλΈ ν΄λμ€μ .validate_<field_name> λ©μλλ₯Ό μΆκ°ν΄ custom field μ ν¨μ± κ²μ¦μ μ§μ ν μ μλ€.
validate
μ¬λ¬ νλμ λν μ ν¨μ± κ²μ¬λ₯Ό νλ €λ©΄ .validate() λ©μλλ₯Ό μΆκ°νλ©΄λλ€. μ΄ λ©μλλ νλκ°μ dict μλ£νμ λ¨μΌ μΈμλ‘ μ·¨νλ€.
validators
Serializerμ κ°λ³νλμ validatorsλ₯Ό ν΅ν΄ μ ν¨μ± κ²μ¬λ₯Ό ν μ μλ€.
ModelSerializer
ModelSerializer ν΄λμ€λ λͺ¨λΈ νλκ° ν¬ν¨λ Serailzer ν΄λμ€λ₯Ό κ°λ¨νκ² λ§λ€ μ μλ€.
λͺ¨λΈμ κΈ°λ°μΌλ‘ μΌλ ¨μ νλκ° μλμΌλ‘ μμ±
unique_together validatorμ κ°μ serializerμ λν validatorλ₯Ό μλ μμ±.create()μ.update()μ κ°λ¨ν κΈ°λ³Έ ꡬνμ ν¬ν¨
λ§μ½ μ 체 νλλ₯Ό ν¬ν¨νκ³ μΆλ€λ©΄ __all__ μΌλ‘ μμ±μ μ€μ νλ©΄λλ€.
exclude μμ±μΌλ‘ μ μΈνκ³ μΆμ νλλ§ μ€μ ν μλ μλ€.
HyperlinkedModelSerializer
HyperlinkedModelSerializer ν΄λμ€λ κΈ°λ³Έ ν€κ° μλ κ΄κ³λ₯Ό λνλ΄κΈ° μν΄ νμ΄νΌλ§ν¬λ₯Ό μ¬μ©νλ€λ μ μ μ μΈνκ³ λ ModelSerialzer ν΄λμ€μ μ μ¬νλ€. κΈ°λ³Έμ μΌλ‘ κΈ°λ³Έ ν€ νλ λμ url νλκ° ν¬ν¨λλ€.
url fieldλ HyperlinkedIdentityFieldλ₯Ό μ¬μ©νλ€.
HyperlinkedModelSerializer ν΄λμ€λ₯Ό μΈμ€ν΄μ€ν ν λλ νμ¬ request λ₯Ό serializer 컨ν
μ€νΈμ ν¬ν¨ν΄μΌνλ€.
μ΄λ κ² μ λ¬νλ©΄ μ κ·νλ URLμ μ¬μ©νλ€.
λ§μ½ μλ URLμ μ¬μ©νλ €λ©΄ {'request': None} μ λͺ
μμ μΌλ‘ μ λ¬νλ©΄λλ€.
How hyperlinked views are determined
λͺ¨λΈμΈμ€ν΄μ€μ νμ΄νΌλ§ν¬νκΈ° μν΄ μ΄λ€ λ·°λ₯Ό μ¬μ©νλμ§ μλ €μ€μΌνλ€. κΈ°λ³Έμ μΌλ‘ {model_name} -detail μ€νμΌκ³Ό view μ΄λ¦μ΄ μΌμΉν΄μΌνλ©°, pk ν€μλ μΈμλ‘ μΈμ€ν΄μ€λ₯Ό μ°Ύλλ€. λ§μ½ λ°λ‘ μ§μ ν΄μ£Όκ³ μΆλ€λ©΄ extra_kwargs μ€μ μμ view_name λλ lookup_field μ΅μ
μ μ€μ νλ©΄λλ€.
λλ serializerμμ νλλ₯Ό λͺ μμ μΌλ‘ μ€μ ν μ μλ€.
μ°Έκ³ λ§ν¬
Last updated
Was this helpful?