Cara Nge-trick Response JSON Tanpa Class Serializer di Django Rest Framework

Sebenernya sih iseng-iseng ajah. Memang bagus menggunakan serializer tapi adakalanya kita penasaran gimana sih kalo kita me-return JSON tanpa class Serializer ? Menurut saya pribadi memang lebih freedom. Tapi jangan sering-sering digunakan yah soalnya ga dianjurin kalo ga memikirkan skalabilitasnya serta masalah yang dihadapinya. Caranya gimana ?

Anggap saja kita mengabaikan file serializers.py. Kita bener-bener ga bikin serializers di sini. Kita langsung ajah ke view. Di sini saya membuat view untuk menangani Login. begini bentuk views.py saya:

from django.contrib.auth.models import User
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import permissions
from django.forms.models import model_to_dict


class UserLogin(APIView):
	permission_classes = (permissions.IsAuthenticated,)
	lookup_field = 'username'

	def post(self, request, format=None):
		user_instance = User.objects.get(username=request.data.get('username'))
		user_instance = model_to_dict(user_instance)
		user_instance.pop("password")
		return Response(user_instance)

Coba perhatikan di dalam method post. Di sana saya mengambil objek model langsung dari model User yang saya peroleh berdasarkan username. Selanjutnya saya mengubah instance model user_instance menjadi tipe data dict di Python lalu saya mengeluarkan key-value password karena terlalu restrict untuk dikembalikan ke user. Selanjutnya user_instance yang sudah saya ubah menjadi dict tersebut saya kembalikan dengan class Response yang akan mengembalikan ke user dalam bentuk JSON. Di sini saya juga menggunakan Basic Auth dan mengirimkan username saya di body dengan method POST. kenapa, karena username ini saya perlukan untuk mengambil objek usernya dari:

user_instance = User.objects.get(username=request.data.get('username'))

Kenapa saya mengubah menjadi dict ? Coba perhatikan contoh sangat-sangat sederhana ini:

mydictjson = {'status': 200, 'data':'ok'}

Jika ingin dikembalikan ke JSON maka cukup:

return Response(mydictjson)

Berikut ini hasil percobaan saya ketika saya Login menggunakan View dari APIView yang sudah saya buat tanpa menggunakan serializers.

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s