Как сделать электронную почту по умолчанию доступной для всех, в то же время имея индивидуальные электронные письма о взаимоотношениях «Один ко многим» для пользователей с sqlalchemy и flask - PullRequest
0 голосов
/ 21 января 2020

У меня было 2 таблицы Пользователи и Электронные письма . Я успешно реализовал отношение один-ко-многим, когда пользователи могут создавать собственные электронные письма, и они могут получать и отображать только свои собственные электронные письма, которые они создали. Однако теперь я хочу иметь набор электронных писем по умолчанию, который будет доступен всем, но не будет редактироваться или удаляться.

В моем приложении есть функция, в которой по очереди отправляются 3 разных письма. Таким образом, чтобы пользователи сразу начали использовать функцию, у них есть возможность использовать электронные письма по умолчанию. Мои пользователи и адреса электронной почты определены следующим образом.

class User(UserMixin, db.Model):
    user_id= db.Column(db.Integer, primary_key=True)
    user_name= db.Column(db.String(200), nullable=False, unique=True)
    data_required = db.Column(db.Integer)
    further_queries = db.Column(db.Integer)
    second_email= db.Column(db.Integer)
    reminder_email = db.Column(db.Integer)
    custom = db.relationship('Custom', backref='author', lazy='dynamic')
    assist = db.relationship('Assists', backref='creator', lazy='dynamic')

    def __repr__(self):
        return '<User {}>'.format(self.user_name)


class Custom (db.Model):
    __table_args__ = (
        db.UniqueConstraint('user_id', 'email_name', name='unique_email'),
    )
    email_id = db.Column(db.Integer, primary_key=True)
    user_id= db.Column(db.Integer, db.ForeignKey('User.user_id'), nullable=False)
    email_name = db.Column(db.String(64), index=True, nullable=False)
    body = db.Column(db.String(200), index=True, nullable=False)

    def __repr__(self):
        return '<User {}>'.format(self.email_name)



Поскольку я не могу ввести адреса электронной почты по умолчанию в таблицу «Настраиваемые» адреса электронной почты и установить внешний ключ для всех пользователей, я создал отдельную таблицу для Электронные письма по умолчанию.


class DefaultEmails (db.Model):

    email_id = db.Column(db.Integer, default=0)
    email_name = db.Column(db.String(64), primary_key=True, index=True, nullable=False)
    body = db.Column(db.String(200), index=True, nullable=False)

    def __repr__(self):
        return '<User {}>'.format(self.email_name)


В настоящее время я установил для email_id писем по умолчанию значение 0, чтобы использовать logi c сервера для получения почты по умолчанию с использованием email_name, если email_id = 0. Так, когда функция запускается отправляя электронные письма, он увидит, что email_id равен 0, и выберет использование email_name, основываясь на другом факторе. Кажется, это очень хакерский способ делать вещи даже для меня.

Мой вопрос: есть ли способ сделать это лучше? Я хочу, чтобы пользователи могли выбирать как стандартные, так и пользовательские электронные письма. Было бы намного лучше, если бы можно было хранить электронные письма по умолчанию и пользовательские сообщения в одной таблице.

PS: я следую *1018* 1021 * учебному пособию Мигеля Гринберга для этого

...