本文共 2956 字,大约阅读时间需要 9 分钟。
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
然后根据官方文档来操作
INSTALLED_APPS = ( ... 'rest_framework',)# urls.pyurlpatterns = [ ... url(r'^api-auth/', include('rest_framework.urls'))]
然后去这个网站,有基本的Views的例子
# 这行不要from snippets.models import Snippetfrom snippets.serializers import SnippetSerializer# 这行不要from django.http import Http404from rest_framework.views import APIViewfrom rest_framework.response import Response# 这行不要from rest_framework import statusfrom .models import Goodsclass 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 serializersclass GoodSerializer(serializers.Serializer): name = serializers.CharField(required=True, max_length=300) click_num = serializers.IntegerField(default=0)
然后将views改成:
from .serializers import GoodSerializerfrom rest_framework.views import APIViewfrom rest_framework.response import Responsefrom .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, includeimport xadminfrom django.views.static import servefrom MxShop.settings import MEDIA_ROOTfrom rest_framework.documentation import include_docs_urlsfrom goods.views import GoodsListViewurlpatterns = [ path('xadmin/', xadmin.site.urls), re_path('media/(?P.*)$', 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视频完结 明天。。。明天带儿子 星期一继续 撒花
转载地址:http://hjepi.baihongyu.com/