小编Dav*_* D.的帖子

在数据库中设计月度订阅系统的良好实践

我想知道如何在数据库中设计月度订阅软件系统.这些系统广泛用于互联网,但我找不到很多关于数据库设计的东西.

就我而言,必须包括这些元素(也许还有其他一些我忘了):

  • 客户
  • 计划(如'基本'/'溢价').每个计划都有月度价格和一定数量的信用额度(例如:基本计划每月提供30个学分,保费计划无限制学分).
  • 积分是在应用程序中花费的虚拟货币.
  • 订阅/取消订阅的
  • 付款(请注意,由于折扣等原因,实际支付的价格可能与计划的基本价格不同)
  • ......?

除了数据库设计之外,还可能需要设置触发器才能执行此操作(?).

我的痛点:

  • 我不能一般地看到这个的全球设计是什么
  • 哪一个应该是DB中的一行:month_susbscrition(即每个客户每月1行)或订阅本身(即每个客户端1行)?
  • 您将如何处理每月订阅的自动续订?
  • 如果您预见到使用Paypal等服务来处理自动每月付款,您将如何处理付款设计?

注意

我自愿不公开我的需求,因为这样,辩论可以保持通用,对其他人更有用.

感谢帮助.

database database-design database-schema

52
推荐指数
3
解决办法
3万
查看次数

在Ionic应用程序中禁用硬件后退按钮?

我正在尝试禁用Cordova应用程序上的后退按钮.我正在使用AngularJS + Ionic Framework.我找到了关于这个的主题并尝试了下面的代码,但它绝对没有效果.任何的想法?谢谢!

的index.html

<head>
    <script>
      document.addEventListener("deviceready", onDeviceReady, false);
        function onDeviceReady() {
            document.addEventListener("backbutton", function (e) {
                e.preventDefault();
                console.log("hello");
            }, false );
        }
    </script>
</head>
Run Code Online (Sandbox Code Playgroud)

请注意,当我按下按钮时,我的控制台中显示"hello".

android dom-events angularjs cordova ionic-framework

29
推荐指数
3
解决办法
4万
查看次数

如何在 Django 中使用 TailwindCSS?

如何在 Django 项目(不仅是 CDN)中使用 TailwindCSS 的所有功能,包括具有自动重新加载的干净工作流程,以及用于生产就绪的 purgeCSS 步骤?

在谷歌搜索时,我发现了一个名为 django-tailwind 的 python 包,但它在这个过程中并没有真正帮助我。

css python django tailwind-css

26
推荐指数
3
解决办法
1万
查看次数

使用 HTMX 处理错误

<form  
 class="" id="form" hx-post="/add/" hx-swap="afterbegin" hx-target="#big_list" hx-trigger="submit">
    <input type="text" name="langue1" >
    <input type="text" name="langue2">
    <div id="errors"></div>
    <button type="submit">GO</button>
</form> 
<div id="big_list"> 
.....
</div>
Run Code Online (Sandbox Code Playgroud)

我有一个很大的列表#big_list,我希望#form在提交时只附加一行。

如何使用 htmx 处理错误并在 中显示消息#errors

htmx

21
推荐指数
4
解决办法
1万
查看次数

Django m2m_changed信号永远不会被调用

我无法理解为什么我的m2m_changed信号没有被触发.

这是代码:

models.py

class Badge(TimeStampable, Expirable, Deactivable,
            SafeDeleteModel):
    _safedelete_policy = HARD_DELETE

    owner = models.ForeignKey(settings.AUTH_USER_MODEL,
                              blank=True, null=True,
                              on_delete=models.PROTECT)
    restaurants = models.ManyToManyField(Restaurant)
    identifier = models.CharField(max_length=2048)

    objects = SafeDeleteManager.from_queryset(BadgeQuerySet)()
Run Code Online (Sandbox Code Playgroud)

signals.py

from django.db.models.signals import m2m_changed
from django.dispatch import receiver

from .models import Badge

@receiver(m2m_changed, sender=Badge.restaurants.through)
def my_callback(sender, **kwargs):
    print("M2M has been changed!")
Run Code Online (Sandbox Code Playgroud)

apps.py(这篇帖子建议改变这个文件)

from django.apps import AppConfig

class BadgesConfig(AppConfig):
    name = 'badges'

    def ready(self):
        import badges.signals
Run Code Online (Sandbox Code Playgroud)

去shell时:

  • m2m_changed.receivers 返回一个空列表(它不起作用,永远不会收到信号)

我找到了类似的帖子,但没有找到答案.

为什么m2m_changed信号不起作用?

编辑

打开shell并导入时badges.signals,它可以正常工作.这意味着问题在于apps.py:

In [1]: from django.db.models.signals …
Run Code Online (Sandbox Code Playgroud)

python django django-signals

14
推荐指数
1
解决办法
705
查看次数

Django 频道 VS Django 3.0 / 3.1?

有人可以澄清Django Channels Project和新的Django 本机异步支持之间的差异或互补性吗?

据我了解,Django-Channels 是一个在 Django 之外启动的项目,然后开始集成到核心 Django 中。但这项工作的当前状态对我来说仍然令人困惑。

例如,今天我使用的是 Django 2.2,我想为我的项目添加 WebSocket 支持。我是不是该:

  • 升级到最新的 Django 版本?
  • 使用 Django 频道包?
  • 两个动作都做吗?

python django django-channels

14
推荐指数
1
解决办法
3492
查看次数

Django:属性和查询集注释之间的重复逻辑

当我想定义我的业务逻辑时,我正在努力寻找正确的方法来做到这一点,因为我经常需要一个属性和一个自定义查询集来获取相同的信息。最后,逻辑重复了。

让我解释...

首先,在定义我的类之后,我自然而然地开始为我需要的数据编写一个简单的属性:

class PickupTimeSlot(models.Model):

    @property
    def nb_bookings(self) -> int:
        """ How many times this time slot is booked? """ 
        return self.order_set.validated().count()
Run Code Online (Sandbox Code Playgroud)

然后,我很快意识到在处理查询集中的许多对象时调用此属性将导致重复查询并降低性能(即使我使用预取,因为再次调用过滤)。所以我解决了用注释编写自定义查询集的问题:

class PickupTimeSlotQuerySet(query.QuerySet):

    def add_nb_bookings_data(self):
        return self.annotate(db_nb_bookings=Count('order', filter=Q(order__status=Order.VALIDATED)))
Run Code Online (Sandbox Code Playgroud)

问题

然后,我最终遇到了两个问题:

  • 我写了两次相同的业务逻辑(“如何查找预订数量”),这可能会导致功能错误。
  • 我需要找到两个不同的属性名称以避免冲突,因为显然,nb_bookings属性和注释的设置都不起作用。这迫使我在使用我的对象时考虑数据是如何生成的,调用正确的属性名称(比如说pickup_slot.nb_bookings(property) 或pickup_slot.db_nb_bookings(annotation) )

这对我来说似乎设计得很差,我很确定有办法做得更好。我需要一种方法来始终编写pickup_slot.nb_bookings并获得高效的答案,始终使用相同的业务逻辑。

我有一个想法,但我不确定...

我正在考虑完全删除该属性并仅保留自定义查询集。然后,对于单个对象,将它们包装在查询集中只是为了能够在其上调用添加注释数据。就像是:

pickup_slot = PickupTimeSlot.objects.add_nb_bookings_data().get(pk=pickup_slot.pk)

对我来说似乎很hacky和不自然。你怎么认为?

python django django-models django-queryset

14
推荐指数
2
解决办法
335
查看次数

Django原子请求如何工作?

我希望我的Django视图是原子的.我的意思是,如果视图中有2个DB写入,我想要0写入,要么写入2个.

例如:

def test_view(request):
    ''' A test view from views.py '''

    MyClass.objects.create()
    raise Exception("whatever")
    MyClass.objects.create()
Run Code Online (Sandbox Code Playgroud)

我在文档中发现的看起来很有希望:

处理Web上的事务的常用方法是将每个请求包装在事务中.在要为其启用此行为的每个数据库的配置中将ATOMIC_REQUESTS设置为True.

它的工作原理如下.在调用视图函数之前,Django启动一个事务.如果生成的响应没有问题,Django会提交事务.如果视图产生异常,Django将回滚事务.

但是,即使我设置ATOMIC_REQUESTS = True,在调用时test_view(),也会创建第一个MyClass对象!我错过了什么?

注意:我正在使用Django 1.7

python django atomic django-database

13
推荐指数
1
解决办法
5921
查看次数

DRF 3.6:如何在APIView中记录输入参数(用于自动生成doc)?

我正在努力使用DRF 3.6自动生成的交互式文档来提供输入参数以填充交互模式.

结果,我得到一个空窗口用于我的POST请求(实际上需要3个参数):

在此输入图像描述

使用Swagger,我可以使用一些YAML直接在docstring中完成.现在,在浏览DRF文档后,我找不到这样做的方法.

class ActivateCustomerView(APIView):

    permission_classes = (AllowAny,)

    def post(self, request):
        """ View dedicated to activating a pre-recorded customer 
            # Should I add some parameters here?
        """

        serializer = ActivateCustomerSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        # ...
Run Code Online (Sandbox Code Playgroud)

django django-rest-framework

13
推荐指数
2
解决办法
2456
查看次数

如何防止Google索引的Heroku应用程序?

尽管有搜索,但我没有找到最终答案.

我在Heroku中有2个应用程序:

  • myapp-stagging.herokuapp.com
  • myapp-with-real-domain-name.com

这2个应用暂时没有内容(谷歌没有索引)

在向他们推送内容之前,我想确保我的不稳定的应用程序不会在Google中编入索引.做正确的方法是什么?我不明白,因为人们谈论robots.txt,但我应该在哪里写这个文件?

谢谢.

PS:这是正确的StackExchange网站问这个吗?对不起,如果不是

heroku

12
推荐指数
2
解决办法
3622
查看次数