Предварительно заполнить базу данных Flask SQLAlchemy - PullRequest
0 голосов
/ 09 мая 2019

У меня есть две модели, одна - «Идентификация», которая содержит два идентификатора (first_id и second_id), а вторая - «Пользователь».Идея состоит в том, что только авторизованным пользователям будут даны их пары first_id и second_id.Они заходят на сайт и входят в систему, вводя два идентификатора, а также имя пользователя и пароль (которые они генерируют тут же и затем).

Я пытаюсь достичь двух вещей:

  1. Предварительно заполните таблицу Идентификации многими (скажем, 100) значениями first_id / second_id, которые будут служить правильными парами значений для входа в систему.

  2. Установите класс User втаким образом, что только если пользователь вводит правильную пару first_id / second_id в форму входа в систему, он может войти в систему (возможно, это включает в себя проверку данных формы с помощью таблицы идентификации).

Вот классы моделей:

class Identification(db.Model):

id = db.Column(db.Integer, primary_key=True)
first_id= db.Column(db.Text, unique=True)
second_id= db.Column(db.Text, unique=True)

def __init__(self, first_id, second_id):
    self.first_id= first_id
    self.second_id= second_id

def __repr__(self):
    return f"ID: {self.id}, first_id: {self.first_id}, second_id: {self.second_id}"



class User(db.Model, UserMixin):

__tablename__ = 'user'

first_id= db.relationship('Identification', backref = 'identificationFID', uselist=False)
second_id = db.relationship('Identification', backref = 'identificationSID', uselist=False)
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.Text, unique=True, index=True)
password_hash = db.Column(db.Text(128))
identification_id = db.Column(db.Integer, db.ForeignKey('identification.id'), unique=True)
first_id = db.Column(db.Text, unique=True)
second_id = db.Column(db.Text, unique=True)

Я был бы признателен за любую помощь в этом, так как я борюсь, и это действительно выше моего понимания Python / Flask,Спасибо всем!

1 Ответ

0 голосов

Вы можете использовать фиктивные данные для заполнения этих таблиц. создайте функцию в этом файле py, где вы можете добавлять объекты в БД, используя ORM и затем вызовите функцию в __init__.py, которая заполнит данные, как только ваш колб-сервер запустится.

Обновление: -

вот код для вашей справки.

Model.py

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import sessionmaker

Base = declarative_base()
engine = create_engine('sqlite:///:memory:', echo=True)
Session = sessionmaker(bind=engine)
session = Session()

class User(Base):
     \__tablename__ = 'users'
     id = Column(Integer, primary_key=True)
     name = Column(String)
     fullname = Column(String)

     #Create getter setters

    def create_tables():
        Base.metadata.create_all(engine)
        user = User()
        user.id=1
        user.name="ABC"
        user.fullname="ABCDEF"
        session.add(user)
        # similarly create more user objects with mock data and add it using session

__ __ INIT. Ру

from model import User
User.create_tables()

Ссылка

...