当前位置: 首页 > news >正文

免费企业建站系统源码/东莞做网站推广的公司

免费企业建站系统源码,东莞做网站推广的公司,stm32做网站服务器,java难学吗 大概要学多久在DRF框架的使用中&#xff0c;一个比较让人头疼的问题是&#xff0c;怎么满足前端那变态的数据过滤需求&#xff0c;特别当前端提供所谓的灵活查询&#xff0c;过滤条件更是五花八门&#xff0c;比如一般前端查询都简单判等查询&#xff1a;path(book/<int:id>,views.Bo…

在DRF框架的使用中,一个比较让人头疼的问题是,怎么满足前端那变态的数据过滤需求,特别当前端提供所谓的灵活查询,过滤条件更是五花八门,比如一般前端查询都简单判等查询:

path('book/<int:id>',views.BooksView.as_view(),name='book')
它对应的请求:
http://127.0.0.1:9000/book/1/

怎么查询书名中包含“英”字,日期大于“2019-3-14”等等诸如此类的请求。Django-filter这个组件就是要解决这样的问题。

1. 安装配置

Django-filter支持的Python版本和Django版本、DRF版本如下:

  • Python: 3.5, 3.6, 3.7, 3.8
  • Django: 1.11, 2.0, 2.1, 2.2, 3.0
  • DRF: 3.10+

在虚拟开发环境中安装:

pip install django-filter

在Django的项目配置文件中安装并配置django_filters应用:

INSTALLED_APPS = [...'django_filters',
]REST_FRAMEWORK = {# 过滤器默认后端'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',),
}

2.使用流程

我们通过一个简单的图书查询来说明如果在DRF中使用Django-filter过滤器。图书模型如下:

# models.py
class Bookinfo(models.Model):btitle = models.CharField(max_length=200,verbose_name='标题')bpub_date = models.DateField(blank=True, null=True,verbose_name='出版日期')bread = models.IntegerField(null=True,verbose_name='阅读数量')bcomment = models.IntegerField(null=True,verbose_name='评论数量')bimage = models.CharField(max_length=200, blank=True, null=True,verbose_name='图片')class Meta:db_table = 'bookinfo'verbose_name = "图书"

序列化类:

#serializers.py
class BookInfoSerializer(serializers.ModelSerializer):class Meta:model = Bookinfofields = "__all__"

我们需要自定义过滤器类:

#filters.py
from django_filters import rest_framework as filtersfrom App.models import Bookinfoclass BookFilter(filters.FilterSet):class Meta:min_read = filters.NumberFilter(field_name="bread", lookup_expr='gte')max_read = filters.NumberFilter(field_name="bread", lookup_expr='lte')model = Bookinfo  # 模型名fields = {'btitle':['icontains'],  'bcomment':['gte','lte'],}

在视图中

# views.py

在浏览器中测试

v2-c525b0666c1d919fdce7d5c25def621f_b.jpg
图1 过滤器的使用

3.详解过滤器类

过滤器类和Django中表单类极其类似,写法基本一样,目的是指明过滤的时候使用哪些字段进行过滤,每个字段可以使用哪些运算。运算符的写法基本参照Django的ORM中查询的写法,比如:大于等于,小于等于用"gte",“lte”等等

可以通过模型快速构建过滤器类

class BookFilter(filters.FilterSet):class Meta:model = Bookinfo   # 模型名fields = ['btitle','bcomment']  # 可以使用的过滤字段

Meta中出现的fields是指过滤条件中可以出现的字段,默认是精确判等,查询的时候可以这样用:

# bcomment=80
http://127.0.0.1:8000/book/?btitle=&bcomment=80

如果不是判等,可以自定义过滤字段进行过滤:

  • 过滤器中常用的字段类型,这些类型要输模型中对应字段类型兼容
CharFilter         字符串类型
BooleanFilter      布尔类型
DateTimeFilter     日期时间类型
DateFilter         日期类型
DateRangeFilter    日期范围
TimeFilter         时间类型
NumberFilter       数值类型,对应模型中IntegerField, FloatField, DecimalField
  • 参数说明:
field_name: 过滤字段名,一般应该对应模型中字段名
lookup_expr: 查询时所要进行的操作,和ORM中运算符一致
  • Meta字段说明
model: 引用的模型,不是字符串
fields:指明过滤字段,可以是列表,列表中字典可以过滤,默认是判等;也可以字典,字典可以自定义操作
exclude = ['password'] 排除字段,不允许使用列表中字典进行过滤

自定义过滤字段:

class BookFilter(filters.FilterSet):btitle = filters.CharFilter(field_name='title',lookup_expr='icontains')pub_year = filters.CharFilter(field_name='bpub_date',lookup_expr='year')pub_year__gt = filters.CharFilter(field_name='bpub_date',lookup_expr='year__gt')bread__gt = filters.NumberFilter(field_name='bread',lookup_expr="gt")bread__lt = filters.NumberFilter(field_name='bread',lookup_expr="lt")class Meta:model = Bookinfofields = ['title','bread','bcomment']

自定义字段名可以和模型中不一致,但一定要用参数field_name指明对应模型中的字段名

日期查询

#定义按年查询,
pub_year = filters.CharFilter(field_name='bpub_date',lookup_expr='year')
# 年份应该大于某值
pub_year__gt = filters.CharFilter(field_name='bpub_date',lookup_expr='year__gt')
#年份应该小于某值
bread__lt = filters.NumberFilter(field_name='bread',lookup_expr="lt")
示例:
http://127.0.0.1:8000/book/?title=&bread=&bcomment=&btitle=&pub_year=&pub_year__gt=2014&bread__gt=&bread__lt=
查询结果:
[{"id": 1,"title": "射雕英雄传","bpub_date": "2020-02-18","bread": 30,"bcomment": 80,"bimage": null}
]

标题查询

# btitle查询的时候可以进行包含查询,icontains在ORM中表示不区分大小的包含
btitle = filters.CharFilter(field_name='btitle',lookup_expr='icontains')
示例:
http://127.0.0.1:8000/book/?title=&bread=&bcomment=&btitle=%E5%B0%84%E9%9B%95&pub_year=&pub_year__gt=&bread__gt=&bread__lt=
结果:
[{"id": 1,"title": "射雕英雄传","bpub_date": "2020-02-18","bread": 30,"bcomment": 80,"bimage": null}
]

阅读数查询

# 阅读数大于
bread__gt = filters.NumberFilter(field_name='bread',lookup_expr="gt")
# 阅读数小于
bread__lt = filters.NumberFilter(field_name='bread',lookup_expr="lt")示例:
http://127.0.0.1:8000/book/?title=&bread=&bcomment=&btitle=&pub_year=&pub_year__gt=&bread__gt=20&bread__lt=100
结果:
[{"id": 1,"title": "射雕英雄传","bpub_date": "2020-02-18","bread": 30,"bcomment": 80,"bimage": null},{"id": 6,"title": "连城诀","bpub_date": "2009-10-23","bread": 30,"bcomment": 90,"bimage": null}
]

限于篇幅,字段列表的字典形式将在后续篇章中讲述,敬请关注。

http://www.lbrq.cn/news/1447993.html

相关文章:

  • 常州手机网站效果/宁波网站推广优化公司电话
  • wordpress 拼车/百度快照seo
  • wordpress主题好的/app优化建议
  • 门户型网站特点/互联网广告平台有哪些
  • 方正集团网站是谁做的/电脑版百度网盘
  • 广东电白建设集团有限公司网站/产品营销
  • wordpress数据库改密码忘记/宁波seo
  • 如何加强政府网站建设和管理/网站seo优化案例
  • 网站网站制作网站/启动互联全网营销推广
  • 做网站 傻瓜软件/谷歌优化的最佳方案
  • 做网站数据库怎么建/国内免费ip地址
  • 马克·扎克伯格大学做的网站/新闻内容摘抄
  • 山东省建设官方网站/唐山seo排名优化
  • 界面漂亮的网站/百度搜索风云榜总榜
  • 梅州做网站需要多少钱/优秀网页设计作品
  • 网站设计上市公司/软文推广文案
  • 威龙电子商务做的网站/武汉企业网站推广
  • dede我的网站/网络推广公司主要做什么
  • 物流建设网站/东莞网络营销推广公司
  • 金融网站建设内容/千峰培训多少钱
  • 网站开发 一个页面多少钱/网站设计公司模板
  • vs做网站怎么把网页改为自适应大小/免费sem工具
  • 深圳实力网站建设/企业如何做好网络营销
  • 佛山网站建设怎样做/icp备案查询
  • 台州哪里做网站/小黄豆crm
  • 南京市招办南京网站设计/深圳seo公司
  • 做一个网站做少多少钱/企业培训考试app
  • 下载app 的网站 如何做/百度网盘网页版入口官网
  • 外贸网站优化建设/百度权重1
  • 网站服务器供应商/今日头条网页版入口
  • 开源智能手机安全相机推荐:Snap Safe
  • Ubuntu Server 22 虚拟机空间扩容
  • Spark在什么情况下CBO才会判断失误,如何避免
  • E频段无线射频链路为5G网络提供高容量回程解决方案 — 第一部分
  • Python day37
  • JavaScript 基础语法