Связь с файловой базой, sqlalchemy, фляга - PullRequest
0 голосов
/ 06 ноября 2018

Добрый день всем!
Я создаю веб-сайт с использованием фляги, где учитель может опубликовать файл с домашним заданием, а студент может прокомментировать сообщение с приложенным файлом решения. Но я застрял в установлении связи между файлом домашней работы и файлом решения. Вот мой файл моделей:

from blog import login
from blog import db
from datetime import datetime
from flask_login import UserMixin


@login.user_loader
def load_user(id):
    return User.query.get(int(id))


class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    access_level = db.Column(db.Integer)
    username = db.Column(db.String(64), index=True, unique=True)
    password = db.Column(db.String(128))
    fullname = db.Column(db.String(128), index=True)
    email = db.Column(db.String(120), index=True, unique=True)
    phone_number = db.Column(db.String(10), index=True, unique=True)
    homework = db.relationship("HomeWork", backref="author", 
        lazy="dynamic")
    answer = db.relationship("Solution", backref="author", 
        lazy="dynamic")

    def __repr__(self):
        return "<User {}>".format(self.username)

    def check_password(self, password):
        return self.password == password

    def is_teacher(self):
        return self.access_level == 1


class HomeWork(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32))
    data = db.Column(db.LargeBinary)
    timestamp = db.Column(db.DateTime, index=True, 
        default=datetime.now)
    user_id = db.Column(db.Integer, db.ForeignKey("user.id"))



class Solution(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    timestamp = db.Column(db.DateTime, index=True, 
        default=datetime.now)
    data = db.Column(db.LargeBinary)

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

1 Ответ

0 голосов
/ 06 ноября 2018

Полагаю, ваша проблема заключается в том, чтобы сохранить файл домашней работы в базу данных, чтобы учащиеся могли просмотреть его, а затем опубликовать решения, верно? Так что, если это так, вы не сохраняете файл напрямую в базу данных SQL.

Вместо этого вы загружаете файл в определенную директорию, скажем, 'homework' (все файлы будут загружены здесь).

И при загрузке вы переименуете файл с «уникальным идентификатором» (это можно пропустить, но это хорошая практика. Поскольку имена не всегда будут упорядоченными)

Затем сохраните «уникальный идентификатор» в таблице «домашнее задание» против его фактического имени и других метаданных, таких как Учитель и т. Д.

Таким образом, всякий раз, когда студент запрашивает файл домашней работы, для него обнаруживается «уникальный идентификатор» (который также является именем файла). И затем возвращается файл с тем же «уникальным идентификатором».

Аналогичный способ для ваших «решений».

Хорошая ссылка для начала загрузки файлов в Flask: Загрузка файлов Flask

...