1、django-debug-toolbar;————debug查看工具,辅助开发
2、django-filter;————数据筛选工具,可用于开发、生产
3、django-cors-middleware;————跨域访问限制工具,可禁止和允许跨域请求访问
三个三方库均需在项目 settings.py 文件中的 INSTALLED_APPS 中加入方可使用。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
#加入三个三方库(其实可以看成app)
'debug_toolbar',
'rest_framework',
'django_filters',
'corsheaders',
]
然后,debug_toolbar 和 corsheaders 还得将其添加到中间件 MIDDLEWARE 配置信息中
MIDDLEWARE = [
#注意:corsheaders跨域访问配置信息最好放在第一位,才能生效;
'corsheaders.middleware.CorsMiddleware',
'debug_toolbar.middleware.DebugToolbarMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
其次,debug-toolbar还需在settings.py中加入以下配置信息:
DEBUG_TOOLBAR_CONFIG = {
# 引入jquery库
'JQUERY_URL': 'https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js',
# 工具栏是否折叠
'SHOW_COLLAPSED': True,
# 是否显示工具栏
'SHOW_TOOLBAR_CALLBACK': lambda x: True,
}
然后,corsheaders 还得在settings.py配置跨区信息:
# 配置跨域白名单
CORS_ORIGIN_WHITELIST = ('www.abc.com', 'www.baidu.com')
#符合正则表达式的跨域白名单
CORS_ORIGIN_REGEX_WHITELIST = ('^(https?://)?(\ w + \。)?google \ .com $', )
#是否允许Cookie包含在跨站点HTTP请求(CORS)中,默认为false
CORS_ALLOW_CREDENTIALS = True
#是否所有的访问都将被允许,白名单不会被使用,默认为false
CORS_ALLOW_METHODS = ('GET', 'POST', 'PUT', 'DELETE')
注意:
完成配置后,django-debug-toolbar,django-cors-middleware便可使用。但是注意,正式上线时,需要清除django-debug-toolbar,毕竟它是用来辅助开发的,不是正式产品功能。
=================================
同时,django_filters还得继续编写自定义过滤器 方可使用。
django_filters是用来在前端输入参数即可过滤掉不必要数据的工具。
class HouseInfoViewSet(CacheResponseMixin, ReadOnlyModelViewSet):
#查询的对象
queryset = HouseInfo.objects.all() \
.select_related('type', 'district', 'estate', 'agent') \
.prefetch_related('tags').order_by('-pubdate')
#序列化查询对象
serializer_class = HouseInfoSerializer
#数据过滤功能
filter_backends = (DjangoFilterBackend, OrderingFilter)
#数据过滤器
filterset_class = HouseInfoFilter
#排序字段(升序)
ordering = ('price',)
ordering_fields = ('price', 'area')
class HouseInfoFilter(drf.FilterSet):
"""自定义房源数据过滤器"""
title = drf.CharFilter(lookup_expr='starts')
dist = drf.NumberFilter(field_name='district')
min_price = drf.NumberFilter(field_name='price', lookup_expr='gte')
max_price = drf.NumberFilter(field_name='price', lookup_expr='lte')
type = drf.NumberFilter()
class Meta:
model = HouseInfo
fields = ('title', 'district', 'min_price', 'max_price', 'type')
以上视图函数组合后,可在前端输入的参数有5个,但这5个参数是并且关系,只有同时满足的这5个参数的具体数值才是满足要求的数据,并返回前端。
网友评论