【发布时间】:2018-12-14 01:03:32
【问题描述】:
我正在尝试想出一种方法来处理 Django 中宠物项目的许可证。假设我希望客户必须为许可证付费,这样他们就可以在许可证到期之前访问网站。
在 Django 中是否有内置工具来处理类似的事情?
现在我能想到的就是创建一个新的“许可证”模型,其中包含我的客户模型的外键和日期时间字段,然后扩展客户模型以检查许可证是否仍然有效:
class License(models.Model):
customer = models.ForeignKey(
license_end = models.DateTimeField(default=timezone.now)
然后我会用这个方法扩展客户模型:
def has_license(self, license):
try:
license = self.license.get(license=license)
except Exception:
return False
return license.license_end > timezone.now()
我想在每个受许可证限制的视图上,我都必须检查if customer.has_license(license):(传递他们的有效许可证对象)。
虽然看起来我会在每个需要保护的视图上一遍又一遍地写同样的几行代码。
有没有更简单的方法来设置它(或类似的东西)?
虽然它有点相关,但我还必须想出一个解决方案来处理许可证密钥并对其进行身份验证,这是一个全新的问题,所以我不会将它包含在这个问题中。
【问题讨论】:
-
你好 Mormoran,你用你的产品做过这个吗?
-
我已经针对我的问题实施了类似的解决方案。我在许可模型上使用了相同的代码,并使用 has_licence() 方法对其进行了扩展。然后在计划任务中,我每 24 小时在午夜检查客户的许可证是否仍然有效。如果结果为假,那么我删除他们的会话并将所有人注销(客户有多个用户)。然后我在登录时再次检查他们的许可证(扩展了用户模型)。如果他们的许可证已过期,我拒绝登录并重定向到他们可以上传新许可证文件的许可证页面
-
如果我们在企业级部署产品,这意味着我们在他的机器上部署了源代码。如果有人知道 python,那么他可以根据我的理解轻松删除 has_licence() 检查。您是否使用任何隐藏的密钥来解密许可证密钥?
-
好吧,在我的情况下,客户无法访问源代码,所以我不必担心他们修改模型中的方法。
标签: python django django-views licensing