Vue + Django API 前后端分离学习笔记 5.3-5.4 djangoseriallizer序列化model

5.1 5.2视频中的新内容大概说下

        goods = Goods.objects.all()[:10]
        json_list = []
        from django.forms.models import model_to_dict
        for good in goods:
            json_dict = model_to_dict(good)
            json_list.append(json_dict)

这个模块可以将model类转换成dict对象然后加到json中

但是很多类型的字段没办法序列化

 

from django.core import serializers
        json_data = serializers.serialize('json', goods)
        json_data = json.loads(json_data)

 

真正开始rest

安装django-guardian。

安装coreapi的过程中如果出现提示utf-8的问题就去这里改下

VueShop(虚拟环境的python目录)\lib\site-packages\pip\compat\__init__.py

在大概75行左右:

if sys.version_info >= (3, ):
    def console_to_str(s):
        try:
            return s.decode(sys.__stdout__.encoding)
        except UnicodeDecodeError:
            return s.decode('utf_8')
# 这里改成gbk

然后卸载coreapi 再重新装

其他要装的模块

Markdown, django-filter, django-crispy-forms, django-guardian, pygments 

然后根据官方文档来操作

https://www.django-rest-framework.org/

INSTALLED_APPS = (
    ...
    'rest_framework',
)


# urls.py
urlpatterns = [
    ...
    url(r'^api-auth/', include('rest_framework.urls'))
]

然后去这个网站,有基本的Views的例子

https://www.django-rest-framework.org/tutorial/1-serialization/

# 这行不要
from snippets.models import Snippet
from snippets.serializers import SnippetSerializer
# 这行不要
from django.http import Http404
from rest_framework.views import APIView
from rest_framework.response import Response
# 这行不要
from rest_framework import status

from  .models import Goods


class SnippetList(APIView):
    """
    List all snippets, or create a new snippet.
    """
    def get(self, request, format=None):
        goods = Goods.objects.all()[:10]
        serializer = SnippetSerializer(goods, many=True)
        return Response(serializer.data)

然后在goodsapp下新建serializers.py

from rest_framework import serializers

class GoodSerializer(serializers.Serializer):
    name = serializers.CharField(required=True, max_length=300)
    click_num = serializers.IntegerField(default=0)

然后将views改成:
 

from .serializers import GoodSerializer
from rest_framework.views import APIView
from rest_framework.response import Response

from  .models import Goods

# Create your views here.

class GoodsListView(APIView):
    """
    List all goods.
    """
    def get(self, request, format=None):
        goods = Goods.objects.all()[:10]
        # 因为goods是一个queryset列表对象 所以需要Many=True
        goods_serializer = GoodSerializer(goods, many=True)
        return Response(goods_serializer.data)

最后在urls.py中添加该类

from django.urls import path, re_path, include
import xadmin
from django.views.static import serve
from MxShop.settings import MEDIA_ROOT
from rest_framework.documentation import include_docs_urls

from goods.views import GoodsListView

urlpatterns = [
    path('xadmin/', xadmin.site.urls),
    re_path('media/(?P<path>.*)$', serve, {"document_root": MEDIA_ROOT}),
    path('goods/', GoodsListView.as_view(), name='goods-list'),
    path('docs/', include_docs_urls(title='慕学生鲜')),
    path('api-auth/', include('rest_framework.urls'))
]

然后去页面检查 有惊喜

右上角的两个按钮可以分别选择看不同的东西

可以自己去试下

然后做个测试 

在GoodSerializer中加入goods_front_image字段看会显示啥

在图片路径的前面自动添加了/media/ 可以 这可以有

5.4视频完结 明天。。。明天带儿子 星期一继续 撒花

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@凌晨三点半

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值