基于多个条件筛选用户数据。

django_sieve的Python项目详细描述


https://badge.fury.io/py/django_sieve.pnghttps://travis-ci.org/alixedi/django_sieve.png?branch=masterhttps://pypip.in/d/django_sieve/badge.pnghttps://coveralls.io/repos/alixedi/django_sieve/badge.png?branch=master

对于许多Web应用程序,博客作为一个典型的例子出现在人们的脑海中,QuerySet需要根据一些业务规则在视图中进行过滤。例如,在博客中,允许编辑文章的“仪表板”视图应该只允许当前登录的用户撰写文章。

一般来说,需要基于某些业务逻辑过滤数据-通用!也就是在每一个角落。这样做的丑陋方式是在每个视图中编写查询来证实业务逻辑。筛子做同样的工作漂亮,最少和正确。

安装

我们在芝士店:

pip install django_sieve

用法

在项目中使用django_筛:

  1. 将其包含在您的设置文件中已安装的应用程序中。

  2. 定义筛子模型。筛选模型是定义用户数据过滤标准的控件。例如,在我们的示例中,我们有一个书店,用户可以在其中订阅来自某个特定作者的所有书籍或来自几个出版商的所有书籍。在这种情况下,他的书单只需要包含他选择的作者和出版商的书。为了做到这一点,我们定义了这样一个筛选模型:

    class Sieve(models.Model):
            group = models.ForeignKey('auth.Group')
            publisher = models.ManyToManyField(Publisher)
            author = models.ForeignKey(Author)
    
  3. settings.py中声明项目范围的筛选模型。例如,如果sieve模型被称为sieve并驻留在书店应用程序中:

    SIEVE_MODEL = 'bookstore.Sieve'
    
  4. 使用sievemanager作为项目中所有模型的modelmanager,您希望根据sieve模型中定义的条件筛选这些模型:

    class Author(models.Model):
            first_name = models.CharField(max_length=30)
            last_name = models.CharField(max_length=40)
            email = models.EmailField()
            objects = SieveManager()
    
  5. 使用方法在视图中定义查询集,如下所示:

    class BookView(ListView):
            queryset = Book.objects.sieve(user=request.user)
    

仅此而已。基于预定义条件对用户数据进行站点范围的筛选,而不必为所有视图编写查询。

不过,请注意性能问题-根据我们的经验,django-sieve适用于90%的情况,特别是当您需要快速演示时。然而,随着站点的成熟和用户数量的增加,您可能希望投资于分析您的视图,并在需要的时候和需要的地方手工创建这些查询。

历史记录

I.0.0(2014年)

  • 测试覆盖率达到93%。

0.3.0(2014年)

  • 将映射从用户更改为组,处理自引用模型等。

0.2.0(2014年)

  • 增加了对sieve_模型中多个字段的支持

0.1.0(2014年)

  • pypi上的第一个版本。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
相对于框架java窗口的鼠标位置错误   Java 8流peek api   java将数据附加到文件中   java使用ExoPlayer 2.8播放播放列表中的特定文件   JavaSpring国际化:如何动态设置语言环境值   java如何在mysql中实现两个表之间的两个关联   java在gradle可执行jar文件中包含运行时参数   surefire插件中的java maven多套测试套件   java试图理解堆分析以确定内存泄漏或所需的大量内存   java识别字符串有数字   数组如何解决错误“java.lang.ArrayIndexOutOfBoundsException:5”   java Swt文件对话框选择的文件太多?   java此登录代码易受SQL注入攻击吗?   Java[3]中的文件<identifier>预期编译错误   java如何在spring webflux中发送列表   jar中未找到java文件异常   如何在java中合并2D数组?   java如何评测本机JNI库