Django DRF除了提供序列化器和视图外的其他功能

1.认证登录。
用DRF自带的认证功能可以判断用户是否登录,在setting中配置好的话就是对所有视图都有效,如果是只在需要认证的视图类里认证就指定authentication_classes=(sessionauthentication,baseauthentication)就能只在这判断用户是否登录。如果登录过则会存入session,在session里面读取信息就能知道用户有没有登陆过。
Setting中所有视图限制:

REST_FRAMEWORK = {
‘DEFAULT_AUTHENTICATION_CLASSES’: (
‘rest_framework.authentication.BasicAuthentication’, # 基本认证
‘rest_framework.authentication.SessionAuthentication’, # session认证
)
}
单个视图限制:
class ExampleView(APIView):
authentication_classes = (SessionAuthentication, BasicAuthentication)

2.权限设置。
如果写在setting中就是对所有视图有效的权限认证,如果写在视图类中就是对一个视图类进行权限的判断。
Setting中所有视图限制:

REST_FRAMEWORK = {
‘DEFAULT_PERMISSION_CLASSES’: (
‘rest_framework.permissions.IsAuthenticated’,
)
}
单个视图限制:
class ExampleView(APIView):
permission_classes = (IsAuthenticated,)

提供的权限
AllowAny 允许所有用户
IsAuthenticated 仅通过认证的用户
IsAdminUser 仅管理员用户
IsAuthenticatedOrReadOnly 认证的用户可以完全操作,否则只能get读取
3.限流
就是限制用户的访问次数
Setting中所有视图限制:
REST_FRAMEWORK = {
‘DEFAULT_THROTTLE_CLASSES’: (
‘rest_framework.throttling.AnonRateThrottle’,# 匿名访问限制
‘rest_framework.throttling.UserRateThrottle’ # 实名访问限制
),
#限流的频度
‘DEFAULT_THROTTLE_RATES’: {
‘anon’: ‘100/day’,
‘user’: ‘1000/day’
}
}
单个视图限制:
class BookDetailView(RetrieveAPIView):
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializer
authentication_classes = [SessionAuthentication]
permission_classes = [IsAuthenticated]
throttle_classes = (UserRateThrottle,)

4.过滤(只在查询多个的时候有效)
先安装pip install django-filter
然后再INSTALLED_APPS中配置
INSTALLED_APPS = [

‘django_filters’, # 需要注册应用,
]

再在REST_FRAMEWORK中加入:
REST_FRAMEWORK = {
‘DEFAULT_FILTER_BACKENDS’: (‘django_filters.rest_framework.DjangoFilterBackend’,)
}
在指定的视图类中过滤:(不能全局指定,只能配置好后在视图类中制定)
class BookListView(ListAPIView):
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializer
filter_fields = (‘btitle’, ‘bread’)

5.排序
From rest_framework.filters import OrderingFilter
class BookListView(ListAPIView):
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializer
filter_backends = [OrderingFilter]
ordering_fields = (‘id’, ‘bread’, ‘bpub_date’)

6.分页
对所有视图限制:
REST_FRAMEWORK = {
‘DEFAULT_PAGINATION_CLASS’: ‘rest_framework.pagination.PageNumberPagination’,
‘PAGE_SIZE’: 100 # 每页数目
}
对单个视图限制:
class BookDetailView(RetrieveAPIView):
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializer
pagination_class = LargeResultsSetPagination
如果在全局分页有效的情况下想让一个视图分页无效:
pagination_class = None

7.版本号
8.异常处理(默认处理不能产生日志)
单独配置的异常处理函数:
from rest_framework.views import exception_handler
def custom_exception_handler(exc, context):
# 先调用REST framework默认的异常处理方法获得标准错误响应对象
response = exception_handler(exc, context)

# 在此处补充自定义的异常处理
if response is not None:
    response.data['status_code'] = response.status_code

return response

在配置文件中声明自定义的异常处理
REST_FRAMEWORK = {
‘EXCEPTION_HANDLER’: ‘my_project.my_app.utils.custom_exception_handler’
}
如果未声明,会采用默认的方式,如下
REST_FRAMEWORK = {
‘EXCEPTION_HANDLER’: ‘rest_framework.views.exception_handler’
}

9.自动生成文档
先安装pip install coreapi
然后再根级URL中配置:
from rest_framework.documentation import include_docs_urls

urlpatterns = [

url(r’^docs/’, include_docs_urls(title=‘My API title’))
]
在视图类中输入三个引号说明文档的信息
class BookListView(generics.ListAPIView):
“”"
返回所有图书信息.
“”"

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值