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 动静分离
-
作用: 扩大了数据可用范围