rest_framework中的serializers,Response,APIView

URL:urlpatterns = [    url(r‘^admin/‘, admin.site.urls),    url(r‘^publi/‘, views.LoginView.as_view()),    url(r‘^publisher/‘, views.PublishView.as_view()),    url(r‘^books/$‘, views.BookView.as_view()),    url(r‘^books/(\d+)/‘, views.BookDetailView.as_view()),    url(r‘^author/$‘, views.AuthorView.as_view()),    url(r‘^author/(\d+)/‘, views.AuthorDetailView.as_view()),]

views:
from django.shortcuts import render,HttpResponse

# Create your views here.

from .models import *from django.views import Viewimport jsonfrom rest_framework import serializersfrom rest_framework.response import Response#为queyset做序列化class PublisherSerializers(serializers.Serializer):    name = serializers.CharField()    email = serializers.CharField()

# class BookSerializers(serializers.Serializer):#     title = serializers.CharField()#     price = serializers.IntegerField()#     pub_date = serializers.DateField()#     publisher = serializers.CharField(source="publisher.email")#     # authors = serializers.CharField(source="authors.all") #多对多不好用#     authors =serializers.SerializerMethodField()#     def get_authors(self,obj):#         temp = []#         for obj in obj.authors.all():#             temp.append(obj.name)#             print(temp)#         return tempclass BookModelSerializers(serializers.ModelSerializer):    class Meta:        model =Book        fields = "__all__"        #自定义显示字段 可以不不加就显示全部  用自定义的话post请求要重写create方法    publisher = serializers.CharField(source="publisher.pk",read_only=True)    # authors = serializers.CharField(source="authors.all") #多对多不好用    # authors =serializers.SerializerMethodField()    # def get_authors(self,obj):    #     temp = []    #     for obj in obj.authors.all():    #         temp.append(obj.name)    #         print(temp)    #     return temp

def create(self, validated_data):        print("validated_data",validated_data)        book = Book.objects.create(title=validated_data["title"],price=validated_data["price"],pub_date=validated_data["pub_date"],publisher_id=validated_data["publisher"]["pk"])        book.authors.add(*validated_data["authors"])        return book

class AuthorModelSerializers(serializers.ModelSerializer):    class Meta:        model = Author        fields = "__all__"

from rest_framework.views import APIViewclass PublishView(APIView):    def get(self,request):        print(request.GET)        return HttpResponse(123)    def post(self,request):        print(request.body)        print(request.POST)

return HttpResponse("789")class BookView(APIView):    def get(self,request):        book_list = Book.objects.all()        # bs = BookSerializers(book_list,many=True)        bs = BookModelSerializers(book_list, many=True)        print(bs.data)        return Response(bs.data)    def post(self,request):        bs = BookModelSerializers(data=request.data)        if bs.is_valid():            bs.save()            return Response(bs.data)        else:            return Response(bs.errors)class BookDetailView(APIView):    def get(self,request,id):        book = Book.objects.filter(pk=id).first()        bs = BookModelSerializers(book)        return Response(bs.data)    def put(self,request,id):        book = Book.objects.filter(pk=id).first()        bs = BookModelSerializers(book,data=request.data)        if bs.is_valid():            bs.save()            return Response(bs.data)        else:            return Response(bs.errors)    def delete(self,request,id):        Book.objects.filter(pk=id).delete()        return Response()class AuthorView(APIView):    def get(self,request):        author_list = Author.objects.all()        authorseria = AuthorModelSerializers(author_list,many=True)        return Response(authorseria.data)    def post(self,request):        authorseria = AuthorModelSerializers(data=request.data)        if authorseria.is_valid():            authorseria.save()            return Response(authorseria.data)        else:            return Response(authorseria.errors)class AuthorDetailView(APIView):    def get(self,request,pk):        author_obj = Author.objects.filter(pk=pk).first()        author_seria = AuthorModelSerializers(author_obj)        return Response(author_seria.data)    def put(self,request,pk):        author_obj = Author.objects.filter(pk=pk).first()        author_seria = AuthorModelSerializers(author_obj,data=request.data)        if author_seria.is_valid():            author_seria.save()            return Response(author_seria.data)        else:            return Response(author_seria.errors)

def delete(self,request,pk):        Author.objects.filter(pk=pk).first().delete()        return Response()
 

原文地址:https://www.cnblogs.com/chvv/p/9631794.html

时间: 2024-08-06 13:31:23

rest_framework中的serializers,Response,APIView的相关文章

rest_framework 中的认证

rest_framework 中的认证 前戏简单源码 OneToOneField与ForeignKey 其实在源码里面OneToOneField是继承ForeignKey,然后OneToOneField与ForeignKey唯一不同的就是OneToOneField在自己的__init__里面写了kwargs['unique'] = True 就是确保字段的唯一性,这样就形成了一对一. 了解了源码以后呢,其实我们可以不用一对一字段 直接可以用ForeignKey 里面写一个unique=True就

JSP Servlet中Request与Response所有成员方法的研究

HttpServletRequest与HttpServletResponse作为Servlet中doGet.doPost等方法中传递的参数,承接了Http请求与响应中的大部分功能,请求的解析与响应的返回都需要靠这两个对象进行,他们中的所有方法及功能在下边总结了一下,希望能对学习Java Web开发有所帮助. 1.HttpServletRequest: /* * 记录各个request.get的值 * request.getAsyncContext();AsyncContext * 获取异步传输的

[ASP.NET] 如何透过 HTTP Handler 让 Web 项目中的图片 Response 时加上指定的文字(转)

这两天在网络上逛街的时候, 看到"Topcat"的一篇文章 "如何透过 HTTP Handler 让 Web 项目中的图案(JPG)Response时加上指定的文字" 因为之前大多都另外使用 ashx 文件刷新图片, 输出时在使用者网页上看到的连结也大多会是 *.ashx,看久了总觉得很怪╰(‵□′)╯ 还好有看到这篇文章,在此先谢谢 Cat 大大- 以下,转录自"topcat 姗舞之间的极度凝聚" 另外,请 Cat 大大恕我修改了 小-小-小-

django rest_framework入门四-类视图APIView

上节,我们使用函数视图,用了@api_view装饰器来修饰,这一节,我们介绍类视图APIView,显然,类视图更符合面向对象的原则. 1.使用类视图APIView重写API 类视图APIView,取代@api_view装饰器,代码如下: from rest_framework import status from rest_framework.response import Response from rest_framework.views import APIView from snippe

Django中request和response中的属性方法详述

转载于 http://blog.chinaunix.net/uid-21633169-id-4332621.html Django 使用 request 和 response 对象表示系统状态数据.. 当请求一个页面时,Django创建一个 HttpRequest 对象.该对象包含 request 的元数据. 然后 Django 调用相应的 view 函数(HttpRequest 对象自动传递给该view函数<作为第一个参数>), 每一个 view 负责返回一个 HttpResponse 对象

caffe中的Local Response Normalization (LRN)有什么用,和激活函数区别

http://stats.stackexchange.com/questions/145768/importance-of-local-response-normalization-in-cnn caffe 解释: The local response normalization layer performs a kind of “lateral inhibition” by normalizing over local input regions.双边抑制.看起来就像是激活函数 几种解释以上链

servlet中request和response

转自:http://www.cnblogs.com/xdp-gacl/p/3798347.html 一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息. 二.Request常用方法 2.1.获得客户机信息 getRequestURL方法返回客户端发出请求时的完整URL. getRequestURI方法返回请求

struts2的action中获得request response session 对象

在struts2中有两种方式可以得到这些对象 1.非IoC方式 要获得上述对象,关键Struts 2中com.opensymphony.xwork2.ActionContext类.我们可以通过它的静态方法getContext()获取当前Action的上下文对象.有了这个对象我们想获得其他几个对象就好办了 ActionContext ctx = ActionContext.getContext(); Map session = ctx.getSession(); 细心的朋友可以发现这里的sessi

Servlet中Request和Response 详解

一.Response 1.Resonse的继承结构:   ServletResponse--HttpServletResponse 2.Response代表响应,于是响应消息中的 状态码.响应头.实体内容都可以由它进行操作,由此引伸出如下实验: 3.利用Response输出数据到客户端  response.getOutputStream().write("中文".getBytes())输出数据,这是一个字节流,是什么字节输出什么字节,而浏览器默认用平台字节码打开服务器发送的数据,如果服