Stripe API,如何从 django 的 ListView 定义中获取 "subscription.status"

Stripe API, How to get "subscription.status" from definition of ListView from django

我正在尝试为数据库 WebApp 配置 Django Stripe 订阅。

我想确保只有“付费用户(订阅用户)”可以搜索数据库。因此我需要检查 subscription.status 是否“活跃”

这里是view.py

的ListView
from django.http import HttpResponse
from.models import TestEu
from django.views.generic import ListView
import stripe
from django.conf import settings
from subscriptions.models import StripeCustomer 

#search 
class DbList(ListView):
    model = TestEu
    
    def get_queryset(self):

        stripe_customer = StripeCustomer.objects.get(user=request.user)
        stripe.api_key = settings.STRIPE_SECRET_KEY
        subscription = stripe.Subscription.retrieve(stripe_customer.stripeSubscriptionId)

        if subscription.status == "active":
            sql = 'select * from test_eu'
            msg = "abcdefg"
            sql += " where eng_discription ~ '.*" + msg +".*' ORDER BY image_amount DESC " 
            object_list = TestEu.objects.raw(sql)
            return object_list

执行上面的代码时,下面的代码出现错误信息。

stripe_customer = StripeCustomer.objects.get(用户=request.user)

NameError: name 'request' is not defined

在这种情况下,如何定义“请求”来获取订阅数据?

我刚刚在这个问题中提到了上述设置,但如果需要更多代码,请告诉我我会用这些信息更新我的问题。谢谢

什么在创建对 get_queryset 的调用?该错误似乎是准确的,因为 request 未在任何地方定义,所以您认为这是什么?

我不是 Django 专家,所以不确定如何配置它,但似乎有大量关于用户身份验证方法的文档,具体取决于您的用例:https://docs.djangoproject.com/en/3.2/topics/auth/default/

从 Stripe 集成的角度来看,我强烈建议您将此订阅状态存储在您自己的用户模型中,并且依赖于调用 Stripe 来检查访问您的系统。您应该在用户注册时为他们设置初始状态,然后跟踪订阅网络挂接 (docs) 的任何状态更改。如果您收到一个您认为订阅不再有效的事件(根据您的业务规则),那么您将停用对您的用户模型的访问。

在您的 queryset() 方法中,您必须使用 self.request 来访问 request 对象的属性。

基本上,替换这个 -

stripe_customer = StripeCustomer.objects.get(user=request.user)

stripe_customer = StripeCustomer.objects.get(user=self.request.user)