Python / Django 应用程序:带有过滤菜单的酒单。过滤逻辑应该去哪里?前端还是后端?

Posted

技术标签:

【中文标题】Python / Django 应用程序:带有过滤菜单的酒单。过滤逻辑应该去哪里?前端还是后端?【英文标题】:Python / Django app: a wine list with filter menu. Where should the filter logic go? Frontend or Backend? 【发布时间】:2016-08-17 13:37:38 【问题描述】:

我创建了一个酒单应用程序,但我开始质疑我的设计。首先,如果您查看下面的 views.py sn-p,您会看到一个发送所有活动 Wine 对象的简单解决方案。但真正的问题是,如何创建过滤器侧边菜单?我喜欢为所有逻辑使用视图,但对我来说,似乎有一个侧边栏,尤其是使用 ajax 需要相当多的前端代码。

这里是a New Egg filter example.

我正在寻找有关如何使用 Django 创建这样一个侧面过滤器菜单的方向。这将主要由前端驱动吗?这可以由视图驱动吗?我应该检查一下 Django Rest 框架吗?

def wine_list(request):
    wines = Wine.active.all()
    return render(request, 'wine/wine_list.html', 'wines': wines)

【问题讨论】:

【参考方案1】:

您的问题的一个解决方案是使用 django 表单,因此您的过滤器框将是一个普通的 django 表单,用户将从这些表单中选择项目然后单击提交按钮

在您的视图方法中,您使用提交的数据为用户生成查询集和呈现模板。 (查看可能有用的 django-filters 模块(此解决方案处理服务器端的所有内容)

另一个解决方案是使用 rest - 你为 wine Eg /api/wines/ 创建一个 api 端点,然后在网站中,当用户选择一些过滤器时,你发送请求(使用 jquery,...)获取新数据并将它们放入结果表,无需重新加载整个页面(这种方法需要一些客户端工作)-(django-filters 在这里也可能有帮助)

根据您的项目要求,您可以选择这些方法中的一种

【讨论】:

以上是关于Python / Django 应用程序:带有过滤菜单的酒单。过滤逻辑应该去哪里?前端还是后端?的主要内容,如果未能解决你的问题,请参考以下文章

使用嵌套结构的参数使用 django-graphene 过滤父级

带有正则表达式的 Django 过滤器

带有多个参数的 Django 模板标签过滤器

带有时间戳的 Django 过滤器模型

Django ORM:带有后续过滤的窗口函数

带有安全过滤器的 Django 奇怪行为