视图类编程
视图类也叫类视图,就是用类来实现视图功能
- django默认只支持get和post数据的接受,没有给其他的请求方式提供一个更好的接受方式。视图类解决了这个问题。
- 视图函数只能解决单路由,单问题,视图类可以写更过,python是面向对象的语言,用python类写视图可以更好的保证代码结构。
视图类编写步骤
- 导入视图类的父类
- 编写对各种请求的实例方法
- 路由指出视图类
当前的视图类由于没有前端页面支持,所以没有csrf校验
在url当中导入视图类避免csrf的方法
在url当中使用
视图类在编写的过程当中,请求数据的格式和响应数据的格式必须有定制,不可以随意写
编写了get请求的处理逻辑:
class FoodView(View):
def __init__(self,**kwargs):
super(FoodView,self).__init__()
self.result = {
"version": "v1.0",
"code": 200,
"data": [
]
}
def get(self,request):
"""
查询
"""
id = request.GET.get("id")
#如果get请求由传递id,返回id对应的数据
#json格式无法封装python数据对象,所以要做数据转义
if id:
try:
data = Foods.objects.get(id=id)
except Exception as e:
self.result["code"] = 500
self.result["data"].append(str(e))
else:
d = {"name": data.name,"price": data.price,"picture": data.picture.url,"description": data.description,"type": data.type_id.label}
self.result["data"].append(d)
#如果没有 id返回所有数据
else:
data = [{"name": data.name,"price": data.price,"picture": data.picture.url,"description": data.description,"type": data.type_id.label} for data in Foods.objects.all()]
self.result["data"] = data
return JsonResponse(self.result)