day8:基于django的三方库

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个参数的具体数值才是满足要求的数据,并返回前端。

你可能感兴趣的:(day8:基于django的三方库)