织梦dedecms多语言网站文章怎么,网站建设专业书入门,网站开发概述,关于建设公司网站的建议视图函数 作用详解视图函数的特点视图类实际开发怎么用一个无意义的demo 作用
用于返回给前端数据详解 def list(request):1.普通的视图函数 request是HttpRequest 函数2.且必须用request.GET|request.POST 指定方法是什么方法3.返回值不能用 rest_framewor… 视图函数 作用详解视图函数的特点视图类实际开发怎么用一个无意义的demo 作用
用于返回给前端数据详解 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, default1)page_size request.GET.get(page_size, default10)objs Student.objects.all()# 分页器实现分页paginator Paginator(objs, page_size) # 构建分页器current_page_objs paginator.get_page(page).object_list # 当前页的数据# 反序列化为jsondata_list StudentSerializer(current_page_objs, manyTrue).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, manyTrue).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(datarequest.data)if serializer.is_valid(raise_exceptionTrue):# 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(idrequest.data[id])serializer StudentSerializer(instanceobj, datarequest.data)if serializer.is_valid(raise_exceptionTrue):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(idparams[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, default1)page_size request.GET.get(page_size, default10)objs Student.objects.all()# 分页器实现分页paginator Paginator(objs, page_size) # 构建分页器current_page_objs paginator.get_page(page).object_list # 当前页的数据# 反序列化为jsondata_list StudentSerializer(current_page_objs, manyTrue).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知含义
]