• restframe_work1


    day 96

    CBV与FBV

    restful协议

    ---- 一切皆是资源,操作只是请求方式

    ----book表增删改查
    /books/ books
    /books/add/ addbook
    /books/(d+)/change/ changebook
    /books/(d+)/delete/ delbook

    ----book表增删改查
    /books/ -----get books ----- 返回当前所有数据
    /books/ -----post books ----- 返回提交数据

    /books/(d+)-----get bookdetail ----- 返回当前查看的单条数据
    /books/(d+)-----put bookdetail ----- 返回更新数据
    /books/(d+)-----delete bookdetail ----- 返回空


    class Books(View):
    def get(self,request):
    pass # 查看所有书籍

    def post(self,request):
    pass # 添加书籍


    class BooksDetail(View):
    def get(self,request,id):
    pass # 查看具体书籍

    def put(self,request,id):
    pass # 更新某本书籍

    def delete(self,request,id):
    pass # 删除某本书籍



    restframework(Django)

    ----针对数据:json


    (1)Django的原生request:

    浏览器 ------------- 服务器

    "GET url?a=1&b=2 http/1.1 user_agent:Google contentType:urlencoded "
    "POST url http/1.1 user_agent:Google contentType:urlencoded a=1&b=2"

    request.body: a=1&b=2
    request.POST:
    if contentType:urlencoded:
    a=1&b=2----->{"a":1,"b":2}

    (2)restframework 下的APIView:




    (3)
    class PublishSerializers(serializers.Serializer):
    name=serializers.CharField()
    email=serializers.CharField()


    PublishSerializers(queryset,many=true)
    PublishSerializers(model_obj)



    总结:
    1 reuqest类----源码

    2 restframework 下的APIView--源码

    url(r'^books/$', views.BookView.as_view(),name="books")# View下的view

    books/一旦被访问: view(request) ------APIView: dispatch()

    3 def dispatch():

    构建request对象
    self.request=Request(request)
    self.request._request
    self.request.GET # get
    self.request.data # POST PUT

    分发----if get请求:
    if request.method.lower() in self.http_method_names:
    handler = getattr(self, request.method.lower(),
    self.http_method_not_allowed)
    else:
    handler = self.http_method_not_allowed

    response = handler(request, *args, **kwargs) # self.get(request, *args, **kwargs)

    return response

    4 序列化类
    # from django.core import serializers
    # ret=serializers.serialize("json",publish_list)

    restframework下的序列类 BookModelSerializers
    将queryset或者model对象序列成一json数据
    bs=BookModelSerializers(book_list,many=True,context={'request': request})
    bs=BookModelSerializers(book,context={'request': request})

    还可以做校验数据,json-------》queryset/model-->记录

    bs=BookModelSerializers(data=request.data)
    if bs.is_valid():
    print(bs.validated_data)
    bs.save() # 重写create方法
    5 操作数据:

    以Book表为例
    class BookView(APIView):
    # 查看所有书籍
    def get(self,request):
    book_list=Book.objects.all()
    bs=BookModelSerializers(book_list,many=True,context={'request': request})
    return Response(bs.data)

    # 添加一本书籍
    def post(self,request):
    # post请求的数据
    bs=BookModelSerializers(data=request.data)
    if bs.is_valid():
    print(bs.validated_data)
    bs.save()# create方法
    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,context={'request': request})
    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()

    restframework

    1 APIView
    2 序列组件
    3 视图、
    4 组件(认证权限频率)
    5 数据解析器
    6 分页和Response

  • 相关阅读:
    oracle单表选择率(selectivity)——计算执行计划的基数
    不该建索引及不走索引的原因
    SQL语言:DDL/DML/DQL/DCL
    HDU 4521 间隔》=1的LIS 线段树+dp
    九度OnlineJudge之1032:ZOJ
    FileUpload的使用案例
    【C++第三课】---新的关键字
    Clash of Clans(COC)资源压缩解密
    jquery第一期:运行第一个jquery
    Java 的zip压缩和解压缩
  • 原文地址:https://www.cnblogs.com/huge-666/p/10088418.html
Copyright © 2020-2023  润新知