Da ich das letzte Mal einen Twitter-Posting-Client erstellt habe, werde ich die Installation von Flask unterlassen. http://qiita.com/Gen6/items/ff1d163acf0fa7687454
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="Senden" class="btn">
</form>
{% if img_url %}
<p><img src="{{ img_url }}"></p>
{% endif %}
{% endblock %}
enctype = "mehrteilig / Formulardaten" ist wichtig.
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>
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>Bitte loggen Sie sich ein</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>Der Benutzername ist unterschiedlich</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>Nicht erlaubte Verlängerung</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()
Wie beim letzten Mal habe ich versucht, eine Spezifikation zu erstellen, die ohne Anmeldung nicht hochgeladen werden kann. Die Dateien, die hochgeladen werden dürfen
ALLOWED_EXTENSIONS = set(['png', 'jpg', 'gif'])
Auf diese Weise können Sie .txt usw. zulassen. Daher ist es einfach, andere Uploader als Bilder anzupassen. Es ist also ohne einen geheimen Schlüssel nutzlos
app.config['SECRET_KEY'] = os.urandom(24)
Ich generiere es.
Dieses Mal möchte ich nur das Ergebnis des Bild-Uploads sofort sehen.
img_url = '/uploads/' + filename
Ich weiß es nicht, weil es schlampig geschrieben ist.
erledigt.
Recommended Posts