我已经使用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和其他选项。这样,客户就可以在想要的时候开始试用,这是推荐的方式。此外,您将能够";"礼物";额外的免费试用";不快乐";客户或类似客户。