京山网站制作,互联网行业特点,网站开发工程师任职要求,amh5.5安装wordpress过滤 过滤就是根据路由url?后的信息过滤出符合#xff1f;后条件的数据而非全部#xff0c;比如…/?nameweer就是只查name是weer的数据#xff0c;其余不返回。
1、安装#xff1a;pip3 install django-filter2、注册#xff1a;在settings.py中的app中注册django-filt…过滤 过滤就是根据路由url?后的信息过滤出符合后条件的数据而非全部比如…/?nameweer就是只查name是weer的数据其余不返回。
1、安装pip3 install django-filter2、注册在settings.py中的app中注册django-filter3、使用全局配置还是在REST_FRAMEWORK中写DEFAULT_FILTER_BACKENDS:[django_filters.rest_framework.DjangoFilterBackend]然后在需要使用的视图类中写filter_fields (name, ) # 指定可过滤字段一般都用在查中局部配置也是在视图类下配置filter_backends […]同方法嘛
排序
就是将查出来的数据按某某排序展示比如按价格升序、按id降序
是依赖于django-filter实现的所以前面安装过这不再书写了
也是可全局使用和局部使用
此介绍局部使用
views.pyfrom rest_framework.filters import OrderingFilterclass BookView(ListAPIView):queryset models.Book.objects.all()serializer_class BookSerializerfilter_backends [OrderingFilter]ordering_fields (id, price) # 指定可用排序字段# 使用时路由url中?后应带固定关键字比如orderingid支持降序就是加负号-比如/?ordering-price就是按价格降序展示
异常处理 通过前面的经验当我们写项目的时候出现错误drf或Django会自动帮你处理错误并返回你它自己设置的错误信息或页面。但在实际项目开发中我们写接口文档会根据自己公司的要求来自定义错误信息并且一般都返回字典json格式里面包括什么状态码、出错信息、headers啊等而不是像Django给你出现的如下页面错误信息 drf中的自动帮你处理错误信息的方法在rest_framework.views.exception_handler中
def exception_handler(exc, context):# exc就是异常信息对象, context可以取出视图函数来if isinstance(exc, Http404):exc exceptions.NotFound()elif isinstance(exc, PermissionDenied):exc exceptions.PermissionDenied()if isinstance(exc, exceptions.APIException):headers {}if getattr(exc, auth_header, None):headers[WWW-Authenticate] exc.auth_headerif getattr(exc, wait, None):headers[Retry-After] %d % exc.waitif isinstance(exc.detail, (list, dict)):data exc.detailelse:data {detail: exc.detail}set_rollback()return Response(data, statusexc.status_code, headersheaders)return None
研究源码可以看到drf自动帮你处理了404、是否允许访问还有APIException错误信息
另一个返回结果None就很灵性意味着该异常处理不全返回None的交给了Django处理
因此展示那种错误页面因此我们需要写自己的异常处理方法一是为了统一错误信息返回格式二是为了记录错误日志 当然像APIException错误这种drf已然帮我们写好了为此我们可以直接用 我是新建的my_exception_handler.py
from rest_framework.views import exception_handler
from rest_framework.views import Response
from rest_framework import statusdef my_exception_handler(exc, content):response exception_handler(exc, content) # 沿用exception_handler处理方法 返回None时就是写我们自己的没有返回None时就是对APIException处理了的if not response:# 写自己的异常处理逻辑 按需求来# 以下为示例return Response(data{code:104,msg:str(exc)}, statusstatus.HTTP_400_BAD_REQUEST)else:# 这返回的是drf内置的处理错误信息如APIException的return Response(data{code:101,msg:response.data.get(detail)}, statusstatus.HTTP_403_FORBIDDEN)
然后去REST_FRAMEWORK中全局配置,没有局部配
EXCEPTION_HANDLER:app01.my_exception_handler.my_exception_handler
对应着来之后只要出现异常都返回类似这种格式的了 自封装Response对象 虽然drf提供的Response对象已经包含了很多功能比如data, status,template_name, headers,exception,content_type这种但其可扩展性还是不高需要结合项目需求来比如要加一个token字段跟在其后便没有办法因此也是在实际开发中我们都需要自己封装一个Response对象不过继承了原生Response对象而已以实现更多需求 下为一个简单示例↓
class APIResponse(Response):def __init__(self,code200,msg成功,dataNone, statusNone,headersNone,**kwargs):dic {code:code, msg:msg}dic.update(kwargs)super().__init__(datadic,statusstatus,headersheaders)
以后我们一般都使用自己的Response对象因为要啥功能自己配就行了。