Agar data dapat ditransfer melalui internet, Kita perlu melakukan data serialzation, salah satu formatnya adalah JSON.
Dengan menggunakan Django REST framework, ada beberpa pendekatan. Pertama kita buat file baru dengan nama serializers.py di direktori backend (gunakan direktori apps Anda),
Menggunakan Serializer
Jika menggunakan class serializer, Anda perlu mengidentifikasi semua field dari table yang digunakan.
Pada file serializer.py, masukan kode berikut:
from rest_framework import serializers from .models import Article class ArticleSerializer(serializers.Serializer): title = serializers.CharField(max_length=200) description = serializers.CharField() slug = serializers.SlugField(read_only=True) published = serializers.DateTimeField(read_only=True) def create(self, validated_data): return Article.objects.create(**validated_data) def update(self, instance, validated_data): instance.title = validated_data.get('title', instance.title) instance.description = validated_data.get('description', instance.description) instance.slug = validated_data.get('slug', instance.slug) instance.published = validated_data.get('published', instance.published) instance.save() return instance
Anda dapat lakukan testing melalui shell. Jalankan perintah berikut pada command prompt.
$ python manage.py shell
Kemudian dalam python shell, jalankan perintah berikut:
>>> from backend.models import Article
>>> from rest_framework.renderers import JSONRenderer
>>> from rest_framework.parsers import JSONParser
>>> a = Article(title="Third Title", description="lorem ipsum third description")
>>> a.save()
>>> from backend.serializers import ArticleSerializer
>>> serializer = ArticleSerializer(a)
>>> serializer.data
{'title': 'Third Title', 'description': 'lorem ipsum third description', 'slug': 'third-title', 'published': '2023-08-03T10:35:53.987661Z'}
Dapat dilihat, data sudah di-serialize. Untuk mengubah menjadi JSON gunakan perintah render.
>>> content = JSONRenderer().render(serializer.data)
>>> content
b'{"title":"Third Title","description":"lorem ipsum third description","slug":"third-title","published":"2023-08-03T10:35:53.987661Z"}'
Sementara untuk proses deserialization Anda dapat menggunakan proses berikut:
>>> import io
>>> stream = io.BytesIO(content)
>>> data = JSONParser().parse(stream)
>>> serializer = ArticleSerializer(data=data)
>>> serializer.is_valid()
True
>>> serializer.validated_data
OrderedDict([('title', 'Third Title'), ('description', 'lorem ipsum third description')])
Menggunakan ModelSerializer
Dapat dilihat dengan menggunakan serializer, kita menulis ulang model data yang digunakan. Tentu akan lebih baik jika kita tidak perlu melakukannya. Untuk itu kita dapat gunakan modelSerializer.
Masih menggunakan file backend/serializers.py, ubah kode seperti dibawah.
from rest_framework import serializers from .models import Article class ArticleSerializer(serializers.ModelSerializer): class Meta: model = Article fields = '__all__'
Dengan pendekantan ModelSerializer, Anda cukup mendefinisikan Meta yang berisi informasi model dan fields yang digunakan. Anda juga tidak perlu membuat fungsi untuk handling create dan update.