当前位置: 首页 > news >正文

【Django-01】 视图函数和视图类

作用

用于返回给前端数据

详解

    def list(request):"""1.普通的视图函数 request是HttpRequest 函数2.且必须用request.GET|request.POST 指定方法是什么方法3.返回值不能用 rest_framework包下的Response 必须是:param request::return:"""assert isinstance(request, HttpRequest)page = request.GET.get("page", default=1)page_size = request.GET.get("page_size", default=10)objs = Student.objects.all()# 分页器实现分页paginator = Paginator(objs, page_size)  # 构建分页器current_page_objs = paginator.get_page(page).object_list  # 当前页的数据# 反序列化为jsondata_list = StudentSerializer(current_page_objs, many=True).datares = {"status_code": 200,"message": "分业查询成功","data": {'items': data_list}}return JsonResponse(res)

读者不需要看其他部分,只需要知道视图函数接收的是HttpRequest对象。
其属性有:
path:路径,不包含域名
method: 表示请求的方法,为str类型,值为POST, GET
encoding:数据的编码格式,默认utf-8
GET: 字典,包含get所有参数
POST:字典,POST所有参数
FILES:字典,上传文件的信息
COOKIES:字典 所有cookie对象
session:字典 表示会话
META: 字典,HTTP 头信息,比如agent,ip等
user:当前登录用户

视图函数的特点

视图函数,函数名称何以结合path达到词语达意的意思,比较灵活。比如函数名称为: list_stident(request)
则url中path(‘list/student’, list_stident)

视图类

视图类是封装了接收前端 [‘get’, ‘post’, ‘put’, ‘patch’, ‘delete’, ‘head’, ‘options’, ‘trace’] 方法支持的类,想要任何函数直接继承APIView 即可,这样子固定的路径下,该类自动识别前端请求类型,会自动找到对应的函数,比如前段发送POST请求,则会自动到你实现的POST中。

实际开发怎么用

一般是视图函数和视图类结合使用。视图类只提供最基本的:【POST 创建 , PUT修改, DELETE 删除 , GET 创建四个函数】至于其他的api则用视图函数达到 见路径知含义的效果。

一个无意义的demo

class StudentApi(APIView):"""1.get/put/post/delte 定义了基础视图2.静态函数定义了 其他的功能"""def get(self, request):queryset = Student.objects.all()data_list = StudentSerializer(queryset, many=True).datares = {"status_code": 200,"message": "查询成功","data": {'items': data_list,'total': len(data_list)}}return Response(res)# 创建->仅仅传入data参数def post(self, request):with transaction.atomic():serializer = StudentSerializer(data=request.data)if serializer.is_valid(raise_exception=True):# save 中做了校验如果存在则更新  否则则是创建instance = serializer.save()res = {"status_code": 200,"message": "创建成功","data": {'id': instance.id}}return Response(res)# 更新要同时传入  instance 和datadef put(self, request):with transaction.atomic():res_body = {"code": 200,"msg": "更新成功","data": {}}try:obj = Student.objects.get(id=request.data['id'])serializer = StudentSerializer(instance=obj, data=request.data)if serializer.is_valid(raise_exception=True):instance = serializer.save()res_body["data"]["obj"] = model_to_dict(instance)except Exception as e:print(e)res_body["msg"] = "更新失败:%s" % ereturn Response(res_body)def delete(self, request):assert isinstance(request, Request)params = request.query_paramsres_body = {"code": 200,"msg": "删除","data": {}}try:obj = Student.objects.get(id=params["id"])obj.delete()res_body["data"]["obj"] = model_to_dict(obj)except Exception as e:res_body["msg"] = "删除失败:%s" % ereturn Response(res_body)def list(request):"""1.普通的视图函数 request是HttpRequest 函数2.且必须用request.GET|request.POST 指定方法是什么方法3.返回值不能用 rest_framework包下的Response 必须是:param request::return:"""assert isinstance(request, HttpRequest)page = request.GET.get("page", default=1)page_size = request.GET.get("page_size", default=10)objs = Student.objects.all()# 分页器实现分页paginator = Paginator(objs, page_size)  # 构建分页器current_page_objs = paginator.get_page(page).object_list  # 当前页的数据# 反序列化为jsondata_list = StudentSerializer(current_page_objs, many=True).datares = {"status_code": 200,"message": "分业查询成功","data": {'items': data_list}}return JsonResponse(res)路由定义为:
urlpatterns = [url(r'^student$', app_view.StudentApi.as_view()),//基本增删改查url('^student/list$', app_view.StudentApi.list)  //见path知含义
]
http://www.lryc.cn/news/240355.html

相关文章:

  • 编译安装报错:configure: error: cannot guess build type; you must specify one
  • 2311rust,到66版本更新
  • JOSEF约瑟 过电流继电器 JL15-300/11 触点形式一开一闭 板前接线
  • postman设置接口关联这样做,薪资直接涨3k
  • Java常见的bug
  • gitea仓库镜像同步至gitlab
  • 服务器不备案的影响
  • 5 个适用于 Linux 的开源日志监控和管理工具
  • 树莓派镜像安装 + 设置 + 镜像批量化操作 - 自动化烧写工具 (四)
  • Redis 性能管理 主从复制与哨兵模式
  • volatile 详解
  • Flink Operator 使用指南 之 Flink Operator安装
  • 类与对象(上篇)
  • 使用SpringBoot集成MyBatis对管理员的查询操作
  • 数据报文去哪儿了
  • Mysql中join on中的like使用
  • 微信运营神器:从群发到批量添加,让你的微信营销更轻松
  • 白杨SEO:2B企业营销是什么?当下主流的短视频直播平台有哪些?企业营销要做短视频直播选哪个平台更好?
  • 将word中的表格无变形的弄进excel中
  • 美国服务器在大陆连不上怎么回事?
  • postgresql数据库中update使用的坑
  • 高可用elasticsearch集群搭建
  • Linux本地MinIO存储服务远程调用上传文件
  • C语言 子函数调malloc申请内存返回给主函数使用——可行,但要注意
  • Python入门教程之条件语句与运算符优先级详解
  • 高通Camera HAL3: CamX、Chi-CDK要点
  • springboot+vue热带野生动物园景点预约门票订票系统
  • Flutter和Android的混合跳转
  • CyberRT-共享内存实现
  • linux通过串口传输文件