[PYTHON] Téléchargeur d'images avec Flask

Créez un téléchargeur d'image simple

Depuis que j'ai créé un client de publication Twitter la dernière fois, je vais omettre d'installer Flask.  http://qiita.com/Gen6/items/ff1d163acf0fa7687454

Créer un modèle

index.html


{% extends "base.html" %}
{% block content %}
<form method="post" action="/send" enctype="multipart/form-data">
  <input type="file" id="img_file" name="img_file" class="col-sm-4">
  <input type="submit" value="Envoyer" class="btn">
</form>
  {% if img_url %}
<p><img src="{{ img_url }}"></p>
  {% endif %}
{% endblock %}

enctype = "multipart / form-data" est important.

base.html


<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="/static/css/style.css">
    <link rel="stylesheet" href="/static/css/bootstrap.min.css">
    <title>File</title>
</head>
<body>
  <div class="container">
    <div class="row">
        {% block content %}
        {% endblock %}
    </div>
  </div>
</body>
</html>

Créer une application

Après cela, je ferai un téléchargement de fichier. J'importe juste SQlite3 car je pourrais l'utiliser à l'avenir.

upload.py


import os
import sqlite3
from flask import Flask, render_template, request, redirect, url_for, send_from_directory, session
from werkzeug import secure_filename
app = Flask(__name__)

UPLOAD_FOLDER = './uploads'
ALLOWED_EXTENSIONS = set(['png', 'jpg', 'gif'])
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
app.config['SECRET_KEY'] = os.urandom(24)

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

@app.route('/')
def index():
    if 'username' in session:
        return render_template('index.html')
    return '''
        <p>Veuillez vous connecter</p>
    '''

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        if username == 'admin':
            session['username'] = request.form['username']
            return redirect(url_for('index'))
        else:
            return '''<p>Le nom d'utilisateur est différent</p>'''
    return '''
        <form action="" method="post">
            <p><input type="text" name="username">
            <p><input type="submit" value="Login">
        </form>
    '''

@app.route('/logout')
def logout():
    session.pop('username', None)
    return redirect(url_for('index'))

@app.route('/send', methods=['GET', 'POST'])
def send():
    if request.method == 'POST':
        img_file = request.files['img_file']
        if img_file and allowed_file(img_file.filename):
            filename = secure_filename(img_file.filename)
            img_file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
            img_url = '/uploads/' + filename
            return render_template('index.html', img_url=img_url)
        else:
            return ''' <p>Extension non autorisée</p> '''
    else:
        return redirect(url_for('index'))

@app.route('/uploads/<filename>')
def uploaded_file(filename):
    return send_from_directory(app.config['UPLOAD_FOLDER'], filename)

if __name__ == '__main__':
    app.debug = True
    app.run()

Comme la dernière fois, j'ai essayé d'en faire une spécification qui ne peut pas être téléchargée sans connexion. Les fichiers qui peuvent être téléchargés

ALLOWED_EXTENSIONS = set(['png', 'jpg', 'gif'])

Comme ça, vous pouvez autoriser .txt et ainsi de suite, et par conséquent, il est facile de personnaliser pour les téléchargeurs autres que les images. C'est inutile sans clé secrète, donc

app.config['SECRET_KEY'] = os.urandom(24)

Je le génère.

Cette fois, je veux voir uniquement le résultat du téléchargement d'image immédiatement.

img_url = '/uploads/' + filename

Je ne sais pas parce que c'est écrit de manière bâclée.

Résultat d'exécution

スクリーンショット 2017-05-18 15.23.26.png

terminé.

Recommended Posts

Téléchargeur d'images avec Flask
Mémo pour l'envoi et la réception d'images avec Python (Flask)
Format d'image en Python
Comment créer un téléchargeur d'image avec Bottle (Python)
Tweet avec image en Python
Collection de traitement d'image en Python
Mémo d'ajout d'image dans reportlab
Vérifiez simplement Content-Type avec Flask (@content_type)
Traitement asynchrone du céleri dans Flask
Télécharger plusieurs fichiers avec Flask
Utilisez <input type = "date"> avec Flask
Segmentation SLIC Superpixel dans une image scikit
Implémentation de la segmentation d'image en python (Union-Find)
Django 1.11.1 Téléchargeur d'images Points faciles à trébucher
Détecter les points de mosaïque dans l'image
[Concaténation d'images] Réorganiser les images en mosaïques
Correction d'Apscheduler fonctionnant deux fois dans Flask
ballon
Hello World avec Flask [Mémo approprié]
ballon
Meilleures pratiques pour les fichiers de configuration dans Flask
Fonction de téléchargement d'image avec Vue.js + Flask
Afficher l'image après l'augmentation des données avec PyTorch
Modèle de reconnaissance d'image utilisant l'apprentissage profond en 2016
(Pour moi) Mettez Flask dans VS Code
Connaissances minimales pour utiliser Form avec Flask
Lancer une application Flask dans Python Anywhere
Inférence d'image de visage à l'aide de Flask et TensorFlow
Comment régler le contraste de l'image en Python
Traitez facilement des images en Python avec Pillow
Notes d'évaluation de la qualité d'image CG en Python
Créez et déployez des applications Flask avec PTVS
Mappez automatiquement les contrôleurs à partir des URL avec Flask