Django(十):视图类使用+ restful安装和使用

web开发与视图类

我们现在能够完成的功能:

1、浏览器发送一个请求

2、路由进行配置,然后指派任务

3、对应视图,接收请求,处理请求,返回响应

视图类

视图:可以被调用的对象,接收一个请求,返回响应

之前写的是函数视图

以类定义的视图,叫做类视图

函数视图:以函数定义的视图,每个视图处理一个请求,一种类型的请求。代码可读性较差

类视图:以类定义的视图,定义各种方法分别处理不同请求

1、视图类的使用

视图:

路由:

使用postman发送get,post,put,delete请求进行验证 url

post,put,delete发送请求,有csrf验证

避免csrf验证方法

第一种:将settings中csrf注掉

第二种:将指定的视图,排除csrf验证

2、统一一个返回格式

3、实现一个get请求

get:获取商品数据

 def get(self,request):
        ## 处理get请求
        ## 返回商品
        goods = Goods.objects.all()
        data = []
        for one in goods:
            ## one 是一个对象
            data.append({
                "goods_number":one.goods_number,
                "goods_name":one.goods_name,
                "goods_price":one.goods_price,
                "goods_count":one.goods_count,
                "goods_location":one.goods_location,
                "goods_safe_date":one.goods_safe_date,
                "goods_pro_time":one.goods_pro_time,
            })
        self.result['data'] = data
        return JsonResponse(self.result)

通过获取指定id 返回指定商品

 def get(self,request):
        ## 处理get请求
        ## 返回商品
        id = request.GET.get("id")
        if id:
            ## 查询指定id的商品
            goods = Goods.objects.get(id= id)   ## 对象
            data = {
                "goods_number": goods.goods_number,
                "goods_name": goods.goods_name,
                "goods_price": goods.goods_price,
                "goods_count": goods.goods_count,
                "goods_location": goods.goods_location,
                "goods_safe_date": goods.goods_safe_date,
                "goods_pro_time": goods.goods_pro_time,
            }
            self.result['data'] = data
        else:
            goods = Goods.objects.all()
            data = []
            for one in goods:
                ## one 是一个对象
                data.append({
                    "goods_number":one.goods_number,
                    "goods_name":one.goods_name,
                    "goods_price":one.goods_price,
                    "goods_count":one.goods_count,
                    "goods_location":one.goods_location,
                    "goods_safe_date":one.goods_safe_date,
                    "goods_pro_time":one.goods_pro_time,
                })
            self.result['data'] = data
        return JsonResponse(self.result)

4、实现post请求

 def post(self,request):
        """
          处理post请求
          用来保存数据
        :param request:
        :return:
        """
        data = request.POST
        goods = self.obj()
        goods.goods_number = data.get("goods_number")
        goods.goods_name = data.get("goods_name")
        goods.goods_price = data.get("goods_price")
        goods.goods_count = data.get("goods_count")
        goods.goods_location = data.get("goods_location")
        goods.goods_safe_date = data.get("goods_safe_date")
        goods.goods_status = data.get("goods_status")
        goods.save()
        self.result["data"] = {
            "id":goods.id,
            "data":"保存成功"
        }
        return JsonResponse(self.result)

5、实现put请求

 

 def put(self,request):
        """
            处理put请求
            更新数据
            更新指定id的商品的名字
        :param request:
        :return:
        """
        # data = request.body  bytes - string    decode  encode
        ## request.body 是一个bytes 类型
        ## json.loads 需要一个string类型  bytes - 》string
        data = json.loads(request.body.decode())
        print (data)
        ## 需要将获取到值 json.loads
        id = data.get("id")
        goodsname = data.get("goodsname")
        ## 更新商品的名字
        goods = self.obj.objects.get(id=id)
        goods.goods_name = goodsname
        goods.save()


        self.result["data"] = {
            "id":id,
            "data":"商品名字更新成功"
        }
        return JsonResponse(self.result)

json   
转成json对象  序列化
    json.dumps      
    json.dump  句柄  文件对象  将一个文件  --》  xxx.json     open
    
反序列化
    json.loads   
    json.load   xxx.json --> xxx.txt

6、实现delete请求

def delete(self, request):
        """
        ## 处理delete请求
        删除数据   获取商品id 然后将该商品删除
        :param request:
        :return:
        """
        data = json.loads(request.body.decode())
        id = data.get("id")
        ## 删除操作
        self.obj.objects.filter(id=id).delete()
        self.result["data"] = {
            "id": id,
            "data": "商品删除成功"
        }

        return JsonResponse(self.result)

Django RESTFUL Framework

restful:接口的编写风格,设计风格 讲求:资源 pep8

django写restful提供了一些插件

安装

pip install djangorestframework

pip install django-filter

django安装的插件是以app的形式存在的

配置settings

 

 

编写接口视图

编写过滤器

编写路由

添加增删改功能

视图

postman发送请求(写操作)

认证缺失,讲到用户权限管理

接口写法

种类: 函数视图,类视图,restful (drf)

返回数据类型: HttpResponse JsonResponse 重定向,render ,render_to_response

restful (drf)提供了增删改查的方法

查询(get)

增加 post

删除 delete

http://127.0.0.1:8000/API/goods/

修改 put

http://127.0.0.1:8000/API/goods/

api接口:

  • 接口 提供数据的支持

  • 爬虫,

  • ajax 动静分离

  • 作用: 扩大了数据可用范围

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值