博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django框架restful序列化get/post/delete/put请求接口设计(高级版)
阅读量:4648 次
发布时间:2019-06-09

本文共 4026 字,大约阅读时间需要 13 分钟。

先上models.py文件内容

from django.db import models# 作者表class Author(models.Model):    nid = models.AutoField(primary_key=True)    name = models.CharField(max_length=32)    age = models.IntegerField()    def __str__(self):        return self.name# 出版社class Publish(models.Model):    nid = models.AutoField(primary_key=True)    name = models.CharField(max_length=32)    city = models.CharField(max_length=32)    email = models.EmailField()    def __str__(self):        return self.name# 图书列表class Book(models.Model):    nid = models.AutoField(primary_key=True)    title = models.CharField(max_length=32)    price = models.DecimalField(max_digits=15, decimal_places=2)    # 外键字段    publish = models.ForeignKey(to="Publish", related_name="book", related_query_name="book_query",                                on_delete=models.CASCADE)    # 多对多字段    authors = models.ManyToManyField(to="Author")

urls.py文件

from django.urls import re_pathfrom xfzapp import viewsfrom xfzapp import views2urlpatterns = [    # 第一步 设置url    re_path(r'books/$', views.BookView.as_view()),    re_path(r'books/(?P
\d+)/$', views.BookFilterView.as_view()),]

views.py视图文件

# python内置import jsonfrom django.shortcuts import render, HttpResponsefrom rest_framework.response import Responsefrom rest_framework.views import APIViewfrom .models import Course, Book, Author, Publishfrom .xfz_serializers import BookSerializerclass BookView(APIView):    def get(self, request):        # 获取queryset,
,
, ... ]> origin_data = Book.objects.all() # 开始序列化 serialized_data = BookSerializer(origin_data, many=True) # 将序列化后的数据, 响应给客户端 return Response(serialized_data.data) def post(self, request): # 序列化验证,需要导入自定义的序列化类BookSerializer verified_data = BookSerializer(data=request.data) # 验证通过 if verified_data.is_valid(): book = verified_data.save() # 传参的时候要传作者id,不要传作者名字 authors = Author.objects.filter(nid__in=request.data['authors']) # 给书添加作者信息 book.authors.add(*authors) return Response(verified_data.data) # 验证不通过 else: return Response(verified_data.errors)class BookFilterView(APIView): # 继承APIView是因为所有的都是基于它 def get(self, request, nid): book_obj = Book.objects.get(pk=nid) serialized_data = BookSerializer(book_obj, many=False) return Response(serialized_data.data) def delete(self, request, nid): book_obj = Book.objects.get(pk=nid).delete() return Response(book_obj) def put(self, request, nid): book_obj = Book.objects.get(pk=nid) verified_data = BookSerializer(data=request.data, instance=book_obj) if verified_data.is_valid(): verified_data.save() return Response(verified_data.data) else: return Response(verified_data.errors)

序列化文件xfz_serializers.py

# 导入模块from rest_framework import serializersfrom .models import Bookclass BookSerializer(serializers.ModelSerializer):    class Meta:        model = Book        fields = ('title',                  'price',                  'publish',                  'authors',                  'publish_name',                  'publish_city'                  )        extra_kwargs = {            'publish_id': {
'write_only': True}, 'authors_id': {
'write_only': True} } publish_name = serializers.CharField(max_length=32, read_only=True, source='publish.name') publish_city = serializers.CharField(max_length=32, read_only=True, source='publish.city') authors = serializers.SerializerMethodField() # "get_"是固定格式,"get_"后面部分与author_list保持一致,不能随便写 def get_authors(self, book_obj): # 拿到queryset开始循环 [{}, {}, {}, {}] author_list = list() for author in book_obj.authors.all(): author_list.append(author.name) return author_list

相关文章:

基础班GET/POST接口设计:(Django原生序列化)

进阶版GET/POST接口设计:

 

转载于:https://www.cnblogs.com/apollo1616/articles/10085514.html

你可能感兴趣的文章
1028. List Sorting (25)
查看>>
BZOJ 1613: [Usaco2007 Jan]Running贝茜的晨练计划
查看>>
ubuntu 重启命令,ubuntu 重启网卡方法
查看>>
Linux的学习:
查看>>
JavaScript中的原型继承原理
查看>>
Python logger模块
查看>>
jquery控制css的display(控制元素的显示与隐藏)
查看>>
关于python做人工智能的一个网页(很牛逼)
查看>>
判断控件的CGRect是否重合,获取控件的最大XY值
查看>>
POJ-1128 Frame Stacking
查看>>
浏览器调试淘宝首页看到有趣的招聘信息
查看>>
ASP.NET Identity “角色-权限”管理 4
查看>>
[转][译]ASP.NET MVC 4 移动特性
查看>>
SurfaceView+MediaPlay的bug们
查看>>
网络表示学习总结
查看>>
完成评论功能
查看>>
far和near
查看>>
Python爬虫实战四之抓取淘宝MM照片
查看>>
2015 Multi-University Training Contest 1
查看>>
C#判断一个字符串是否是数字或者含有某个数字
查看>>