Сделать страницу Django видимой только для подтвержденных писем - PullRequest
0 голосов
/ 18 мая 2019

Я пытаюсь добавить функцию на свой сайт, где определенная часть сайта может использоваться только пользователями, которые подтвердили свою учетную запись электронной почты.

Я нашел решение, но оно не работает.Вот что я сделал: мне предложили добавить для этого отдельную модель:

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 ]

1 голос
/ 18 мая 2019

Напишите это:

{% 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 %}
1 голос
/ 18 мая 2019

Вам необходимо использовать атрибут related_name поля account_emailconfirmation.user один к одному

{% if user.account_emailconfirmation.has_verified_email %}

Примечание: вы должны использовать заглавные буквы в своих классах:

class EmailConfirmation(models.Model):

Я предполагаю, что часть account_ предназначена для приложения. Вам это не нужно, вы знаете, в каком приложении находится модель.

...