Flask - Как загрузить несколько изображений в базу данных и отобразить их на веб-сайте - PullRequest
0 голосов
/ 16 октября 2018

У меня есть область загрузки изображений с Flask.Эта область также может загружать несколько изображений.Есть до 8 треков загрузки изображений.После загрузки сохраненных изображений я помещаю их в файл.Я выложу изображения, которые они загружают снова на сайте.Я думаю о регистрации в базе данных, но я не знаю, как это зарегистрировать.Я хочу картинки с входным файлом.Сколько изображений было загружено, и я не понимаю, как их нарисовать.

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

HTML;

 <input id="files" name="files" type="file" multiple>

Python;

UPLOAD_FOLDER = 'static/uploads/'
ALLOWED_EXTENSIONS = set(['png', 'jpg', 'jpeg', 'gif'])

app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

class AlbumForm(Form):
    files = FileField(render_kw={'multiple': True})

#Album form
def allowed_file(filename):
    return '.' in filename and \
           filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

@app.route("/admin/fotografAlbumu", methods=["GET", "POST"])
def upload():
    form = AlbumForm(request.form)
    if request.method == 'POST' and 'files' in request.files:
        for f in request.files.getlist('files'):
            files = form.files.data
            username = session["username"]
            url=app.config['UPLOAD_FOLDER']+username
            f.save(os.path.join(url, f.filename))
        return render_template('/admin/galeri.html',form=form)
    return render_template('/admin/galeri.html',form=form)

@app.route('/uploaded_file/<path:filename>')
def uploaded_file(filename):
    print(filename)
    username = session["username"]
    url=app.config['UPLOAD_FOLDER']+username
    return send_from_directory(url, filename)

Я считаю, что структура базы данных выглядит следующим образом:

class Album(db.Model):
    albumid = db.Column(db.Integer, primary_key=True)
    userid = db.Column(db.Integer, db.ForeignKey('users.userid'))
    fotoOne = db.Column(db.String(80))
    fotoTwo = db.Column(db.String(80))
    fotoThree = db.Column(db.String(80))
    fotoFour = db.Column(db.String(80))
    fotoFive = db.Column(db.String(80))
    fotoSix = db.Column(db.String(80))
    fotoSeven = db.Column(db.String(80))
    fotoEight = db.Column(db.String(80))

1 Ответ

0 голосов
/ 17 октября 2018

Для рендеринга изображений получите альбом, затем получите доступ к изображениям в качестве атрибутов, например album.foto_one, album.foto_two и т. Д .:

@app.route('/show-album/<int:id>', methods=['GET', 'POST'])
def show_album(id=None):
try:
    album = Album.query.get(id)
    return render_template('album.html', album=album)
except:
    abort(404)

Затем в album.html:

<img src="{{ url_for('/static/uploads/album.foto_one }}">
<img src="{{ url_for('/static/uploads/album.foto_two }}">

Вы также можете сохранить имена изображений в виде массива и отобразить их следующим образом:

class Album(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    photos = db.Column(ARRAY(String))

И в вашем шаблоне итерируйте список фотографий вместо ввода всех ссылок.

{% for item in album.photos %}
<ul>
    <li>
        <img src="{{ url_for('static/uploads/item') }}"> # <img src="/static/uploads/image_name.jpeg">
    </li>
</ul>
{% endfor%}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...