Загрузка в несколько пунктов назначения с Flask -загрузками - PullRequest
0 голосов
/ 09 апреля 2020

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

У меня все хорошо с загрузкой и получением фотографий для постов. Но теперь я хочу добавить возможность загружать также фотографии профиля и не понимаю, как назначать различные конечные точки (папки) для сообщений сообщений и изображений профиля. Я использую Flask -Загрузки для загрузки.

Вот мой код:

init.py

from flask_uploads import configure_uploads, IMAGES, UploadSet
basedir = os.path.abspath(os.path.dirname(__file__))
app = flask.Flask(__name__)

app.config['SECRET_KEY'] = 'sdjhgsjghlakjf'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///'+os.path.join(basedir, "app.db")

app.config['UPLOADED_IMAGES_DEST'] = os.path.join(basedir, 'static/images')
images = UploadSet('images', IMAGES)
configure_uploads(app, images)

db = flask_sqlalchemy.SQLAlchemy(app)
from app import routes, models

forms.py

class NewPost(flask_wtf.FlaskForm):
    topic = wtforms.SelectField('Choose the topic', choices=choices, validators=[DataRequired()])
    heading = wtforms.StringField('Heading')
    post_text = wtforms.StringField('Post text')
    image = wtforms.FileField('Post image')
    submit = wtforms.SubmitField('Post')

    def create_post_object(self):
        # Retrieve data from form
        topic = self.topic.data
        heading = self.heading.data
        post_text = self.post_text.data
        image = images.save(self.image.data)


        # Creating a post
        post = models.Post.create_post(topic=topic, heading=heading, post_text=post_text, post_image=image)

        return post


class SignUp(flask_wtf.FlaskForm):
    name = wtforms.StringField('Name: ', validators=[DataRequired()])
    email = wtforms.StringField('E-mail: ', validators=[DataRequired()])
    user_image = wtforms.FileField('Picture')
    pwd = wtforms.PasswordField('Password: ', validators=[DataRequired()])
    submit = wtforms.SubmitField('Sign Up')

    def create_user(self):
        """
        Creates new user
        """
        # Retrieve data from form
        name = self.name.data
        email = self.email.data
        pwd = self.pwd.data
        user_image = images.save(self.user_image.data)

        new_user = models.User.create_user(name=name, email=email, pwd=pwd, user_image=user_image)
        sign_in_new_user_auto = models.User.sign_in(email, pwd, remember=True)

        return new_user

models.py

class Post(db.Model):
    post_id = db.Column(db.Integer, primary_key=True)
    topic = db.Column(db.String(64))
    heading = db.Column(db.String)
    post_text = db.Column(db.String)
    post_image = db.Column(db.String)
    post_time = db.Column(db.DateTime, default=datetime.datetime.utcnow)
    comments = db.relationship('Comment', backref='post')

    @classmethod
    def create_post(cls, topic=None, heading=None, post_text=None, post_time=None, post_image=None):
        # Apply filters
        topic = topic.lower()

        # Create obj
        new_post = models.Post(topic=topic, heading=heading, post_text=post_text, post_time=post_time, post_image=post_image)
        db.session.add(new_post)
        db.session.commit()

        return new_post


class User(flask_login.UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64))
    email = db.Column(db.String(64))
    pwd = db.Column(db.String(64))
    user_image = db.Column(db.String)
    comments = db.relationship('Comment', backref='user') # one User may have many comments(one-to-many with Comments table)

    def change_pwd(self, pwd):
        hashed_pwd = generate_password_hash(pwd)
        self.pwd = hashed_pwd
        db.session.commit()


    @classmethod
    def create_user(cls, name=None, email=None, pwd=None, user_image=None):
        """
        creates new user
        """

        new_user = cls(name=name, email=email, user_image=user_image)
        new_user.change_pwd(pwd)

        db.session.add(new_user)
        db.session.commit()

        return new_user

По сути, мне нужно, чтобы все изображения, относящиеся к сообщениям, сохранялись в static/images/posts, а также изображения всех пользователей, которые сохранялись в static/images/users. Как я могу сделать это с помощью Flask -загрузок?

Спасибо!

...