如何让用户在注册后在django免费试用期



我已经使用dj paddle实现了对django应用程序的订阅支付。唯一的问题是,如果用户想开始免费试用,他们必须输入自己的信用卡详细信息。没有选项可以禁用桨板上的信用卡要求。

我想在本地处理paddle之外的免费试用,这样用户就不必输入信用卡来试用该应用程序。

如何在注册后自动为用户分配自定义角色,例如"free_trial",7天后切换到另一个自定义角色"trial_expired"?

这样我就可以调用模板中的方法,例如

{% if user.free_trial %}
#Access to app
{% else %}
"Your trial has expired"
{% endif %}

用户视图.py

def register(request):
if request.method == 'POST':
form = CustomUserCreationForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
messages.success(request, f'Your account has been created {username}!')
new_user = authenticate(username=form.cleaned_data['username'],
password=form.cleaned_data['password1'],
)
login(request, new_user)
return HttpResponseRedirect('/dashboard/')
else:
form = CustomUserCreationForm()
return render(request, 'users/register.html', {'form': form})

这就是我目前实现dj paddle的方式,以限制我的应用程序中的非订户访问。

用户模型

class CustomUser(AbstractUser):


def has_subscription(self):
return self.subscriptions.filter(Q(status='active') | Q(status='trialing')).exists()

我的模板

{% if user.has_subscription %}
#Access to app"
{% else %}
#Render Payment form"
{% endif %}

我会在我的模型中创建一个新的布尔字段,例如:

free_trial = models.BooleanField(default=True)
registration_date = models.DateTimeField(auto_now_add=True)

创建后,free_trial将自动启用。接下来,您需要将计划任务(如Celery(设置为每天/小时或特定时间段,以执行以下脚本:

for user in User.objects.filter(free_trial=True):
user.check_trial_expired()

并将check_trial_expired((函数添加到您的用户模型中,该函数将检查七天是否已经过去,并修改free_trial=False

我建议将试用配置为可选,并在需要时添加另一个字段,如trial_start_date和其他选项。这样,客户就可以在想要的时候开始试用,这是推荐的方式。此外,您将能够";"礼物";额外的免费试用";不快乐";客户或类似客户。

最新更新