使Django页面仅对确认的电子邮件可见

时间:2019-05-18 13:14:14

标签: python django django-models django-templates

我正在尝试向我的站点添加功能,该站点的某些部分只能由确认其电子邮件帐户的用户使用。

我找到了解决方案,但是没有用。 这是我所做的: 建议我为此添加一个单独的模型:

class account_emailconfirmation(models.Model):
        user = models.OneToOneField(User, on_delete=models.CASCADE)

        @property
        def has_verified_email(self):
            return self.user.emailaddress_set.filter(verified=True,primary=True).exists()

这是模板的样子:

{% extends "main/header.html" %}

{% if user.account_emailconfirmation.has_verified_email %}
{% block content %}
<style>

</style>

<body>



<div> <p>Here goes a bunch of features</p> </div>       



</body>

{% endblock %}

{% else %}

<p> Your email is ot confirmed </p>
{% endif %}

但是它不起作用,因为即使不用确认我的电子邮件也可以看到该页面。

这是我的数据库的样子:

有一个名为account_emailconfirmation的表,然后有一个索引verified,该索引在未验证帐户时将提供0,在验证帐户时将提供1

任何建议都值得赞赏!

2 个答案:

答案 0 :(得分:1)

您需要使用account_emailconfirmation.user一对一字段的related_name属性

{% if user.account_emailconfirmation.has_verified_email %}

旁注,您应该将课程大写:

class EmailConfirmation(models.Model):

我假设account_部分用于该应用程序。您不需要它,您知道模型在哪个应用程序中。

答案 1 :(得分:1)

写下:

{% extends "main/header.html" %}

{% block content %}
{% if user.profile.has_verified_email %}
<style>

</style>

<body>



<div> <p>Here goes a bunch of features</p> </div>       



</body>

{% else %}

<p> Your email is ot confirmed </p>
{% endif %}
{% endblock %}