1. 程式人生 > 其它 >Django自帶的序列化元件

Django自帶的序列化元件

Django自帶的序列化元件(為drf做鋪墊)

(drf:django rest framework)

#在前端獲取到,後端使用者表裡所有的資料,並且是列表套字典的格式
# views.py

from django.http import JsonResponse

def ab_ser(request):
    user_queryset = models.User.objects.all()
    user_list = []
    for user_obj in user_queryset:
        tmp = {
            'pk': user_obj.pk,
            'username': user_obj.username,
            'age': user_obj.age,
            'gender': user_obj.get_gender_display()
        }
        user_list.append(tmp)
    return JsonResponse(user_list, safe=False)

前端顯示結果:

"""
[
  {"pk": 1,"username": "zhao","age": 19,"gender": "male"},
  {"pk": 2,"username": "lisi","age": 20,"gender": "female"},
  {"pk": 3,"username": "wangwu","age": 18,"gender": "others"},
  {"pk": 4,"username": "tony","age": 22,"gender": 4}
]

"""

前後端分離專案
	作為後端開發,只需要寫程式碼將資料返回
    能夠序列化返回給前端即可
    	再寫一個介面文件,告訴前端每個欄位代表的意思即可

藉助於內建序列化模組serializers

from django.core import serializers


def ab_ser(request):
    user_queryset = models.User.objects.all()
    # user_list = []
    # for user_obj in user_queryset:
    #     tmp = {
    #         'pk': user_obj.pk,
    #         'username': user_obj.username,
    #         'age': user_obj.age,
    #         'gender': user_obj.get_gender_display()
    #     }
    #     user_list.append(tmp)
    # return JsonResponse(user_list, safe=False)

    # 序列化
    res = serializers.serialize('json', user_queryset)  # 自動將資料變成json格式的資料,並且內部非常的全面
    return HttpResponse(res)

效果:

[
  {
    "model": "app01.user",
    "pk": 1,
    "fields": {"username": "zhao","age": 19,"gender": 1}
  },
  {
    "model": "app01.user",
    "pk": 2,
    "fields": {"username": "lisi","age": 20,"gender": 2}
  },
  {
    "model": "app01.user",
    "pk": 3,
    "fields": {"username": "wangwu","age": 18,"gender": 3}
  },
  {
    "model": "app01.user",
    "pk": 4,
    "fields": {"username": "tony","age": 22,"gender": 4}
  }
]

#後端開發寫介面就是利用序列化元件渲染資料,然後寫一個介面文件,