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视频完结 明天。。。明天带儿子 星期一继续 撒花