rest_framework请求和响应

from .models import Pbulisher
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status
from app001 import serializers


"""列出所有的出版社,或者创建一个新的出版社"""
@api_view(['GET','POST'])#这里面存放的是它被允许的一些请求,如果发送了一个不予许的就会抛出一个405
def publisher_list(request):
    if request.method=='GET':
        queryset=Pbulisher.objects.all()#先获取到所有的出版社然后调用serializers里面的方法
        s=serializers.PublisherSerializer(queryset,many=True)#这个时候把所有的出版社信息都序列化了
        #最后return Response
        return Response(s.data)
    if request.method=='POST':
        #创建出版社
        s=serializers.PublisherSerializer(data=request.data)#把客户端传过来的数据用序列化生成实例
        if s.is_valid():#如果数据没有问题
            s.save()
            return Response(s.data,status=status.HTTP_201_CREATED)
        else:
            return Response(s.errors,status=status.HTTP_400_BAD_REQUEST)

"""获取,更新或删除一个出版社实例"""
@api_view(['GET','PUT','DELETE'])
def publisher_detail(request,pk):
     try:
         publisher=Pbulisher.objects.get(pk=pk)#从数据中找id一致的出版社
     except Pbulisher.DoesNotExist: #如果找不到就抛出一个404
         return Response(status=status.HTTP_404_NOT_FOUND)
     if request.method=='GET':
         s=serializers.PublisherSerializer(publisher)
         return Response(s.data)
     elif request.method=='PUT':
         s=serializers.PublisherSerializer(publisher,data=request.data)
         if s.is_valid():
             s.save()
             return Response(s.data)
         return Response(s.errors,status=status.HTTP_400_BAD_REQUEST)
     elif request.method=='DELETE':
          publisher.delete()
          return Response(status=status.HTTP_204_NO_CONTENT)

用到@app.view装饰它默认会做一个检测是否登录 因为上写的根本就没有登录所以要测试的话需要借助一个插件httpie
pip install hhtpie
创建一个用户:python manage.py createsuperuser
接着用httpie进行测试:http -a 用户名:密码 http://127.0.0.1:8000/publishers/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值