Arragement dans la gallerie
This commit is contained in:
parent
318ab80dc8
commit
eda47f57a6
112
MyWebApp.py
112
MyWebApp.py
@ -1,112 +0,0 @@
|
||||
#!venv/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
from flask import Flask, request, flash, render_template, url_for, session, redirect, abort, make_response, send_file, escape
|
||||
from werkzeug import secure_filename
|
||||
from wand.image import Image
|
||||
from wtforms import BooleanField, StringField, IntegerField, PasswordField, validators
|
||||
import sqlite3
|
||||
from flask_bcrypt import Bcrypt
|
||||
|
||||
|
||||
|
||||
from views.blog import blog
|
||||
from views.filesupload import filesupload
|
||||
from views.inscription import inscription
|
||||
from views.profil import profil
|
||||
from views.logs import logs
|
||||
from views.loginlogout import loginlogout
|
||||
|
||||
from tools.databaseinit import init_db, init_dir
|
||||
|
||||
import glob, os, sys, time
|
||||
|
||||
app = Flask( 'pywallter' )
|
||||
bcrypt = Bcrypt(app)
|
||||
if init_db():
|
||||
print ("La base de données a été créer")
|
||||
exit()
|
||||
|
||||
if init_dir():
|
||||
print ("Le repertoire des utilisateurs a été créer")
|
||||
exit()
|
||||
|
||||
|
||||
|
||||
# Set the secret key. Keep this really secret
|
||||
app.secret_key = 'klfkdlfkdslfkln234325;cx!' # Chiffre les cookies si j'ai bien capté. À générer aléatoirement impérativement avant de mettre en ligne.
|
||||
|
||||
#### Variables ####################################################################################
|
||||
|
||||
DOSSIER_PERSO='users/'
|
||||
|
||||
extensionimg = {'.jpg', '.JPG', '.png', '.PNG', '.gif', '.GIF', '.bmp', '.BMP', '.jpeg', '.JPEG' }
|
||||
|
||||
##################################################################################################
|
||||
|
||||
app.register_blueprint(inscription)
|
||||
app.register_blueprint(blog)
|
||||
app.register_blueprint(filesupload)
|
||||
app.register_blueprint(profil)
|
||||
app.register_blueprint(logs)
|
||||
app.register_blueprint(loginlogout)
|
||||
|
||||
@app.route( '/gallery/')
|
||||
def gallery():
|
||||
if 'username' in session :
|
||||
UTILISATEUR='%s' % escape(session['username'])
|
||||
THUMBNAILS=DOSSIER_PERSO + UTILISATEUR + '/images/thumbnails/'
|
||||
fichiers = [fich for fich in os.listdir(THUMBNAILS)]
|
||||
return render_template('gallery.html', THUMBNAILS=THUMBNAILS, fichiers=fichiers)
|
||||
else :
|
||||
return redirect(url_for('login'))
|
||||
|
||||
@app.route( '/parametres/', methods=['GET','POST'] )
|
||||
def parametres() :
|
||||
if 'username' in session :
|
||||
return render_template('parametres.html')
|
||||
else:
|
||||
return redirect(url_for('login'))
|
||||
|
||||
@app.route('/up/view/<nom>')
|
||||
def download(nom):
|
||||
if 'username' in session :
|
||||
UTILISATEUR='%s' % escape(session['username'])
|
||||
nom = secure_filename(nom)
|
||||
if os.path.isfile(DOSSIER_PERSO + UTILISATEUR + '/files/' + nom): # si le fichier existe
|
||||
return send_file(DOSSIER_PERSO + UTILISATEUR + '/files/' + nom, as_attachment=True) # on l'envoie
|
||||
else:
|
||||
flash(u'Fichier {nom} inexistant.'.format(nom=nom), 'error')
|
||||
return redirect(url_for('list')) # sinon on redirige vers la liste, avec un message d'erreur
|
||||
else :
|
||||
return redirect(url_for('login'))
|
||||
|
||||
@app.route('/remove/<nom>')
|
||||
def remove(nom):
|
||||
if 'username' in session :
|
||||
UTILISATEUR='%s' % escape(session['username'])
|
||||
nom = secure_filename(nom)
|
||||
if os.path.isfile(DOSSIER_PERSO + UTILISATEUR + '/files/' + nom): # si le fichier existe
|
||||
os.remove(DOSSIER_PERSO + UTILISATEUR + '/files/' + nom) # on le supprime
|
||||
return redirect(url_for('filesupload.list', _external=True))
|
||||
else:
|
||||
if os.path.isfile(DOSSIER_PERSO + UTILISATEUR + '/images/thumbnails/' + nom): # si le fichier existe
|
||||
os.remove(DOSSIER_PERSO + UTILISATEUR + '/images/thumbnails/' + nom) # on le supprime
|
||||
os.remove(DOSSIER_PERSO + UTILISATEUR + '/images/' + nom) # on le supprime
|
||||
return redirect(url_for('gallery'))
|
||||
else:
|
||||
flash(u'Fichier {nom} inexistant.'.format(nom=nom), 'error')
|
||||
return redirect(url_for('filesupload.list', _external=True)) # sinon on redirige vers la liste, avec un message d'erreur
|
||||
|
||||
else :
|
||||
return redirect(url_for('login'))
|
||||
|
||||
@app.route( '/' )
|
||||
def index():
|
||||
if 'username' in session :
|
||||
return redirect(url_for('filesupload.upload'))
|
||||
else :
|
||||
return redirect(url_for('loginlogout.login', _external=True))
|
||||
|
||||
|
||||
if __name__ == '__main__' :
|
||||
app.run(host='127.0.0.1', port=8080, debug=True)
|
14
pywallter.py
14
pywallter.py
@ -61,14 +61,14 @@ def gallery():
|
||||
fichiers = [fich for fich in os.listdir(THUMBNAILS)]
|
||||
return render_template('gallery.html', THUMBNAILS=THUMBNAILS, fichiers=fichiers)
|
||||
else :
|
||||
return redirect(url_for('login'))
|
||||
return redirect(url_for('loginlogout.login'))
|
||||
|
||||
@app.route( '/parametres/', methods=['GET','POST'] )
|
||||
def parametres() :
|
||||
if 'username' in session :
|
||||
return render_template('parametres.html')
|
||||
else:
|
||||
return redirect(url_for('login'))
|
||||
return redirect(url_for('loginlogout.login'))
|
||||
|
||||
@app.route('/up/view/<nom>')
|
||||
def download(nom):
|
||||
@ -81,7 +81,7 @@ def download(nom):
|
||||
flash(u'Fichier {nom} inexistant.'.format(nom=nom), 'error')
|
||||
return redirect(url_for('list')) # sinon on redirige vers la liste, avec un message d'erreur
|
||||
else :
|
||||
return redirect(url_for('login'))
|
||||
return redirect(url_for('loginlogout.login'))
|
||||
|
||||
@app.route('/remove/<nom>')
|
||||
def remove(nom):
|
||||
@ -101,7 +101,7 @@ def remove(nom):
|
||||
return redirect(url_for('filesupload.list', _external=True)) # sinon on redirige vers la liste, avec un message d'erreur
|
||||
|
||||
else :
|
||||
return redirect(url_for('login'))
|
||||
return redirect(url_for('loginlogout.login'))
|
||||
|
||||
|
||||
@app.route('/myfiles/<filename>')
|
||||
@ -111,7 +111,7 @@ def myfiles(filename):
|
||||
return send_from_directory(
|
||||
os.path.join(DOSSIER_PERSO, UTILISATEUR, 'files'), filename )
|
||||
else :
|
||||
return 403
|
||||
return redirect(url_for('loginlogout.login'))
|
||||
|
||||
|
||||
@app.route('/myfiles/images/<filename>')
|
||||
@ -121,7 +121,7 @@ def myimg(filename):
|
||||
return send_from_directory(
|
||||
os.path.join(DOSSIER_PERSO, UTILISATEUR, 'images'), filename )
|
||||
else :
|
||||
return 403
|
||||
return redirect(url_for('loginlogout.login'))
|
||||
|
||||
@app.route('/myfiles/images/thumbnails/<filename>')
|
||||
def mythumbnails(filename):
|
||||
@ -130,7 +130,7 @@ def mythumbnails(filename):
|
||||
return send_from_directory(
|
||||
os.path.join(DOSSIER_PERSO, UTILISATEUR, 'images/thumbnails'), filename )
|
||||
else :
|
||||
return 403
|
||||
return redirect(url_for('loginlogout.login'))
|
||||
|
||||
@app.route( '/' )
|
||||
def index():
|
||||
|
@ -11,3 +11,52 @@ function animation() {
|
||||
|
||||
window.setTimeout(divhider, 2200);
|
||||
window.setTimeout(animation, 2000);
|
||||
|
||||
let darkBoxVisible = false;
|
||||
|
||||
window.addEventListener('load', (event) => {
|
||||
let images = document.querySelectorAll("img");
|
||||
if(images !== null && images !== undefined && images.length > 0) {
|
||||
images.forEach(function(img) {
|
||||
img.addEventListener('click', (evt) => {
|
||||
showDarkbox(img.src);
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
function showDarkbox(url) {
|
||||
if(!darkBoxVisible) {
|
||||
let x = (window.innerWidth - 1280) / 2;
|
||||
let y = window.scrollY + 50;
|
||||
|
||||
// Create the darkBox
|
||||
var div = document.createElement("div");
|
||||
div.id = "darkbox";
|
||||
var tmp = url;
|
||||
tmp = tmp.replace("thumbnails/", "");
|
||||
tmp= tmp.trim();
|
||||
div.innerHTML = '<img class="darkboximg" src="'+tmp+'" />';
|
||||
document.body.appendChild(div);
|
||||
let box = document.getElementById("darkbox");
|
||||
box.style.left = x.toString()+"px";
|
||||
box.style.top = y.toString()+"px";
|
||||
box.style.height = 'auto';
|
||||
box.addEventListener('click', (event) => {
|
||||
// Remove it
|
||||
let element = document.getElementById("darkbox");
|
||||
element.parentNode.removeChild(element);
|
||||
|
||||
darkBoxVisible = false;
|
||||
})
|
||||
|
||||
darkBoxVisible = true;
|
||||
|
||||
} else {
|
||||
// Remove it
|
||||
let element = document.getElementById("darkbox");
|
||||
element.parentNode.removeChild(element);
|
||||
|
||||
darkBoxVisible = false;
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
#tada {
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
@ -23,7 +22,7 @@
|
||||
margin-bottom: 0%;
|
||||
text-align: center;
|
||||
width: 90%;
|
||||
|
||||
|
||||
-webkit-animation-name: apparition;
|
||||
-webkit-animation-duration: 0.2s;
|
||||
-webkit-animation-iteration-count: 1;
|
||||
@ -34,7 +33,7 @@
|
||||
|
||||
.flashed {
|
||||
list-style-type: none;
|
||||
position: center;
|
||||
position: center;
|
||||
margin: auto;
|
||||
margin-top: 5%;
|
||||
width: 50%;
|
||||
@ -42,7 +41,7 @@
|
||||
}
|
||||
|
||||
.flashed p {
|
||||
font-family: sans-serif;
|
||||
font-family: sans-serif;
|
||||
text-align: center;
|
||||
border-radius: 3px;
|
||||
/*box-shadow: 1px 1px 1px black; */
|
||||
@ -50,12 +49,12 @@
|
||||
|
||||
.succes p {
|
||||
background-color: #CDCBD0;
|
||||
color: #00A310;
|
||||
}
|
||||
color: #00A310;
|
||||
}
|
||||
|
||||
.error p {
|
||||
background-color: #CDCBD0;
|
||||
color: #B80000;
|
||||
background-color: #CDCBD0;
|
||||
color: #B80000;
|
||||
}
|
||||
|
||||
#majuscule {
|
||||
@ -150,3 +149,66 @@
|
||||
|
||||
/* ######### Animations ######### */
|
||||
|
||||
#darkbox { width:1280px;
|
||||
height:720px;
|
||||
position:absolute;
|
||||
top:0;
|
||||
left:0;
|
||||
background-color:#333;
|
||||
overflow: hidden;
|
||||
text-align:center;
|
||||
margin-top: 7%;
|
||||
}
|
||||
.darkboximg { padding:0; max-width: 1216px; max-height: 684px;}
|
||||
|
||||
#gallery {
|
||||
line-height:0;
|
||||
-webkit-column-count:5;
|
||||
-webkit-column-gap:5px;
|
||||
-moz-column-count:5;
|
||||
-moz-column-gap:5px;
|
||||
column-count:5;
|
||||
column-gap:5px;
|
||||
margin-top:2rem;
|
||||
}
|
||||
|
||||
#gallery img {
|
||||
width: 100% !important;
|
||||
height: auto !important;
|
||||
margin-bottom:5px;
|
||||
filter: grayscale(100%);
|
||||
transition: filter 1s;
|
||||
}
|
||||
|
||||
#gallery img:hover {
|
||||
filter:none;
|
||||
}
|
||||
|
||||
@media (max-width: 1200px) {
|
||||
#gallery {
|
||||
-moz-column-count: 4;
|
||||
-webkit-column-count: 4;
|
||||
column-count: 4;
|
||||
}
|
||||
}
|
||||
@media (max-width: 1000px) {
|
||||
#gallery {
|
||||
-moz-column-count: 3;
|
||||
-webkit-column-count: 3;
|
||||
column-count: 3;
|
||||
}
|
||||
}
|
||||
@media (max-width: 800px) {
|
||||
#gallery {
|
||||
-moz-column-count: 2;
|
||||
-webkit-column-count: 2;
|
||||
column-count: 2;
|
||||
}
|
||||
}
|
||||
@media (max-width: 400px) {
|
||||
#gallery {
|
||||
-moz-column-count: 1;
|
||||
-webkit-column-count: 1;
|
||||
column-count: 1;
|
||||
}
|
||||
}
|
||||
|
@ -33,9 +33,9 @@
|
||||
|
||||
<div class="masthead clearfix">
|
||||
<div class="inner">
|
||||
<h3 class="masthead-brand">MapagePerso</h3>
|
||||
<h3 class="masthead-brand">Pywallter</h3>
|
||||
<ul class="nav masthead-nav">
|
||||
<li class="active"><a href="/upload/"></a></li>
|
||||
<li class="active"><a href="/filesupload/"></a></li>
|
||||
<li><a href="#">Inscription</a></li>
|
||||
<li><a href="#">Contact</a></li>
|
||||
</ul>
|
||||
@ -44,7 +44,8 @@
|
||||
|
||||
<div class="inner cover">
|
||||
<h1 class="cover-heading">Restez libres</h1>
|
||||
<p class="lead">Bienvenue sur Olala, hébergeur de fichier libre basé sur Flask et hébergé sur une simple Orange Pi. Bientôt disponible, gallerie d'images, blog et d'autres. Site en construction permanente.</p>
|
||||
<p class="lead">Bienvenue sur Olala, hébergeur de fichier libre basé sur Flask et hébergé sur une simple petit ordinateur.
|
||||
Bientôt disponible, gallerie d'images, blog et d'autres. Site en construction permanente.</p>
|
||||
<br>
|
||||
<p class="lead">
|
||||
<form method="POST" action="{{ url_for('loginlogout.login') }}">
|
||||
|
@ -16,7 +16,7 @@
|
||||
<div class="navbar-collapse collapse">
|
||||
<ul class="nav navbar-nav">
|
||||
<li class="active"><a href="/blog/"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Blog</a></li>
|
||||
<li><a href="/upload/"><span class="glyphicon glyphicon-cloud-upload" aria-hidden="true"></span> Upload</a></li>
|
||||
<li><a href="/filesupload/"><span class="glyphicon glyphicon-cloud-upload" aria-hidden="true"></span> Upload</a></li>
|
||||
<li><a href="/view/"><span class="glyphicon glyphicon-cloud-download" aria-hidden="true"></span> Fichiers</a></li>
|
||||
<li><a href="/gallery/"><span class="glyphicon glyphicon-eye-open" aria-hidden="true"></span> Gallerie</a></li>
|
||||
<li><a href="/logs/"><span class="glyphicon glyphicon-floppy-disk" aria-hidden="true"></span> Logs</a></li>
|
||||
@ -53,7 +53,7 @@
|
||||
<br />
|
||||
<div class="well"> Hello <span id="majuscule">{{ session['username'] }} ! </span>Bienvenue sur ce blog communautaire. Il vous est possible de poster des articles en tout genre sur cette page. Vous disposez pour cela d'un éditeur de type Markdown. Une page <a href="/blog/{{ session['username'] }}"><span class="glyphicon glyphicon-star" aria-hidden="true"></span> Page publique</a> et une <a href="/privateblog/"><span class="glyphicon glyphicon-star" aria-hidden="true"></span> Page privée</a> vous sont attribuées.<br>Ayez bien conscience que ce site est une expérience est qu'il est indispensable d'avoir une sauvegarde de tous vos articles. Nous ne pourrons, en aucun cas, être tenu responsable de la perte de vos données. Merci de votre compréhension.</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<p class="lead">
|
||||
<form method="POST" action="{{ url_for('blog.racine_blog') }}" id="postform">
|
||||
@ -80,7 +80,7 @@
|
||||
<img src="/static/usersprofil/{{ post.avatar }}" class="img-rounded" alt=""/><br><br>
|
||||
<p>{{ post.nom }}<br>{{ post.prenom }}<br>{{ post.age }} ans<br>{{ post.profession }}<br></p>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-sm-9">
|
||||
<div class="well">
|
||||
<h6>{{ post.time }}</h6>
|
||||
|
@ -16,7 +16,7 @@
|
||||
<div class="navbar-collapse collapse">
|
||||
<ul class="nav navbar-nav">
|
||||
<li><a href="/blog"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Blog</a></li>
|
||||
<li><a href="/upload/"><span class="glyphicon glyphicon-cloud-upload" aria-hidden="true"></span> Upload</a></li>
|
||||
<li><a href="/filesupload/"><span class="glyphicon glyphicon-cloud-upload" aria-hidden="true"></span> Upload</a></li>
|
||||
<li><a href="/view/"><span class="glyphicon glyphicon-cloud-download" aria-hidden="true"></span> Fichiers</a></li>
|
||||
<li class="active"><a href="/gallery/"><span class="glyphicon glyphicon-eye-open" aria-hidden="true"></span> Gallerie</a></li>
|
||||
<li><a href="/logs/"><span class="glyphicon glyphicon-floppy-disk" aria-hidden="true"></span> Logs</a></li>
|
||||
@ -52,12 +52,11 @@
|
||||
{% if fichiers %}
|
||||
|
||||
|
||||
<div id="images">
|
||||
{% for fich in fichiers %}
|
||||
<div id="gallery">
|
||||
{% for image in fichiers %}
|
||||
|
||||
<img src="/myfiles/images/thumbnails/{{ image }}" class="img-rounded" alt=""/>
|
||||
|
||||
<a href="#"><img src="/static/thumbnails/{{ fich }}" class="img-rounded" alt=""/></a>
|
||||
<!--<a href="{{ url_for('remove', nom=fich) }}"><button type="button" class="btn btn-sm btn-danger">Delete</button></a>-->
|
||||
|
||||
{% endfor %}
|
||||
|
||||
</div>
|
||||
|
@ -12,7 +12,7 @@
|
||||
<div class="inner">
|
||||
<h3 class="masthead-brand">OpenBlogStock</h3>
|
||||
<ul class="nav masthead-nav">
|
||||
<li><a href="/upload/">Login</a></li>
|
||||
<li><a href="/filesupload/">Login</a></li>
|
||||
<li class="active"><a href="/inscription/">Inscription</a></li>
|
||||
<li><a href="#">Contact</a></li>
|
||||
</ul>
|
||||
|
@ -12,7 +12,7 @@
|
||||
<div class="inner">
|
||||
<h3 class="masthead-brand">OpenBlogSotck</h3>
|
||||
<ul class="nav masthead-nav">
|
||||
<li class="active"><a href="/upload/">Login</a></li>
|
||||
<li class="active"><a href="/uploadfiles/">Login</a></li>
|
||||
<li><a href="/inscription/">Inscription</a></li>
|
||||
<li><a href="#">Contact</a></li>
|
||||
</ul>
|
||||
|
@ -16,7 +16,7 @@
|
||||
<div class="navbar-collapse collapse">
|
||||
<ul class="nav navbar-nav">
|
||||
<li><a href="/blog"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Blog</a></li>
|
||||
<li><a href="/upload/"><span class="glyphicon glyphicon-cloud-upload" aria-hidden="true"></span> Upload</a></li>
|
||||
<li><a href="/filesupload/"><span class="glyphicon glyphicon-cloud-upload" aria-hidden="true"></span> Upload</a></li>
|
||||
<li><a href="/view/"><span class="glyphicon glyphicon-cloud-download" aria-hidden="true"></span> Fichiers</a></li>
|
||||
<li><a href="/gallery/"><span class="glyphicon glyphicon-eye-open" aria-hidden="true"></span> Gallerie</a></li>
|
||||
<li class="active"><a href="/logs/"><span class="glyphicon glyphicon-floppy-disk" aria-hidden="true"></span> Logs</a></li>
|
||||
|
@ -16,7 +16,7 @@
|
||||
<div class="navbar-collapse collapse">
|
||||
<ul class="nav navbar-nav">
|
||||
<li><a href="/blog"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Blog</a></li>
|
||||
<li><a href="/upload/"><span class="glyphicon glyphicon-cloud-upload" aria-hidden="true"></span> Upload</a></li>
|
||||
<li><a href="/filesupload/"><span class="glyphicon glyphicon-cloud-upload" aria-hidden="true"></span> Upload</a></li>
|
||||
<li><a href="/view/"><span class="glyphicon glyphicon-cloud-download" aria-hidden="true"></span> Fichiers</a></li>
|
||||
<li><a href="/gallery/"><span class="glyphicon glyphicon-eye-open" aria-hidden="true"></span> Gallerie</a></li>
|
||||
<li><a href="/logs/"><span class="glyphicon glyphicon-floppy-disk" aria-hidden="true"></span> Logs</a></li>
|
||||
|
@ -16,7 +16,7 @@
|
||||
<div class="navbar-collapse collapse">
|
||||
<ul class="nav navbar-nav">
|
||||
<li><a href="/blog"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Blog</a></li>
|
||||
<li><a href="/upload/"><span class="glyphicon glyphicon-cloud-upload" aria-hidden="true"></span> Upload</a></li>
|
||||
<li><a href="/filesupload/"><span class="glyphicon glyphicon-cloud-upload" aria-hidden="true"></span> Upload</a></li>
|
||||
<li class="active"><a href="/view/"><span class="glyphicon glyphicon-cloud-download" aria-hidden="true"></span> Fichiers</a></li>
|
||||
<li><a href="/gallery/"><span class="glyphicon glyphicon-eye-open" aria-hidden="true"></span> Gallerie</a></li>
|
||||
<li><a href="/logs/"><span class="glyphicon glyphicon-floppy-disk" aria-hidden="true"></span> Logs</a></li>
|
||||
@ -44,29 +44,29 @@
|
||||
<!--<div class="page-header">
|
||||
<h1>Liste des fichiers uploadés</h1>
|
||||
</div>-->
|
||||
<br>
|
||||
<br>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>Fichier(s) <span class="badge">{{ i }}</span></th>
|
||||
<th>Taille (en octets)</th>
|
||||
<th></th>
|
||||
<th></th>
|
||||
<th>Fichier(s) <span class="badge">{{ i }}</span></th>
|
||||
<th>Taille (en octets)</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% if listeFichiers %}
|
||||
{% for fich in listeFichiers %}
|
||||
{% for fichier in listeFichiers %}
|
||||
<tr>
|
||||
<td>{{ fich[0] }}</td>
|
||||
<td><a href="{{ url_for('download', nom=fich[1]) }}">{{fich[1]}}</a></td>
|
||||
<td>{{ fich[2] }}</td>
|
||||
<td><a href="{{ url_for('remove', nom=fich[1]) }}"><button type="button" class="btn btn-sm btn-danger">Supprimer</button></a></td>
|
||||
<td>{{ fichier[0] }}</td>
|
||||
<td><a href="/myfiles/{{ fichier[1] }}">{{ fichier[1] }}</a></td>
|
||||
<td>{{ fichier[2] }}</td>
|
||||
<td><a href="{{ url_for('remove', nom=fichier[1]) }}"><button type="button" class="btn btn-sm btn-danger">Supprimer</button></a></td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
@ -16,7 +16,7 @@
|
||||
<div class="navbar-collapse collapse">
|
||||
<ul class="nav navbar-nav">
|
||||
<li><a href="/blog/"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Blog</a></li>
|
||||
<li class="active"><a href="/upload/"><span class="glyphicon glyphicon-cloud-upload" aria-hidden="true"></span> Upload</a></li>
|
||||
<li class="active"><a href="/uploadfiles/"><span class="glyphicon glyphicon-cloud-upload" aria-hidden="true"></span> Upload</a></li>
|
||||
<li><a href="/view/"><span class="glyphicon glyphicon-cloud-download" aria-hidden="true"></span> Fichiers</a></li>
|
||||
<li><a href="/gallery/"><span class="glyphicon glyphicon-eye-open" aria-hidden="true"></span> Gallerie</a></li>
|
||||
<li><a href="/logs/"><span class="glyphicon glyphicon-floppy-disk" aria-hidden="true"></span> Logs</a></li>
|
||||
@ -60,19 +60,18 @@
|
||||
<div class="col-sm-3"></div>
|
||||
<div class="col-sm-6">
|
||||
<br />
|
||||
<div class="well">Vous pouvez "uploader" ici des fichiers afin de les sauvegarder ou de les rendre accessibles à quelqu'un d'autre. Ils seront par la suite disponibles en téléchargement dans notre rubrique <a href="/view/"><span class="glyphicon glyphicon-cloud-download" aria-hidden="true"></span> Fichiers</a>. Les images envoyées, quand à elles se retrouveront directement dans la <a href="/gallery/"><span class="glyphicon glyphicon-eye-open" aria-hidden="true"></span> Gallerie</a>.<br>Ayez bien conscience que ce site est une expérience est qu'il est indispensable d'avoir une sauvegarde de tous vos fichiers. Nous ne pourrons, en aucun cas, être tenu responsable de la perte de vos données. Merci de votre compréhension.</div>
|
||||
<div class="well">Ici, vous pouvez envoyer des fichiers afin de les sauvegarder ou de les rendre accessibles à quelqu'un d'autre. Ils seront par la suite disponibles en téléchargement dans notre rubrique <a href="/view/"><span class="glyphicon glyphicon-cloud-download" aria-hidden="true"></span> Fichiers</a>. Les images envoyées, quand à elles se retrouveront directement dans la <a href="/gallery/"><span class="glyphicon glyphicon-eye-open" aria-hidden="true"></span> Gallerie</a>.<br>Ayez bien conscience que ce site est une expérience est qu'il est indispensable d'avoir une sauvegarde de tous vos fichiers. Nous ne pourrons, en aucun cas, être tenu responsable de la perte de vos données. Merci de votre compréhension.</div>
|
||||
<br />
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">Choisissez un ou plusieurs fichiers à uploader</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
|
||||
<!--<div class="form-group">-->
|
||||
<div class="panel-body">
|
||||
<!--<div class="form-group">-->
|
||||
<form action="" method="post" enctype="multipart/form-data">
|
||||
<input type="file" name="fic"id="fic" multiple>
|
||||
<br>
|
||||
<button type="submit" id="tada" class="btn btn btn-success">Upload !</button>
|
||||
<input type="file" name="fic"id="fic" multiple>
|
||||
<br>
|
||||
<button type="submit" id="tada" class="btn btn btn-success">Upload !</button>
|
||||
</form>
|
||||
<!--</div>-->
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from flask import Blueprint, Flask, request, flash, render_template, url_for, session, redirect, abort, make_response, send_file, escape, flash, abort
|
||||
from werkzeug import secure_filename
|
||||
from wand.image import Image
|
||||
from werkzeug.utils import secure_filename
|
||||
from PIL import Image
|
||||
import time
|
||||
import sqlite3
|
||||
import os
|
||||
@ -15,8 +15,8 @@ filesupload = Blueprint('filesupload', __name__, template_folder='templates')
|
||||
DOSSIER_PERSO='users/'
|
||||
extensionimg = {'.jpg', '.JPG', '.png', '.PNG', '.gif', '.GIF', '.bmp', '.BMP', '.jpeg', '.JPEG' }
|
||||
|
||||
@filesupload.route( '/upload/', methods=['GET', 'POST'])
|
||||
def upload():
|
||||
@filesupload.route( '/filesupload/', methods=['GET', 'POST'])
|
||||
def uploadfiles():
|
||||
if 'username' in session :
|
||||
UTILISATEUR='%s'% escape(session['username'])
|
||||
if request.method == 'POST' :
|
||||
@ -28,33 +28,33 @@ def upload():
|
||||
flash(u'Fichier déjà existant, merci de spécifier un autre nom de fichier', 'error')
|
||||
else:
|
||||
if os.path.isfile(DOSSIER_PERSO + UTILISATEUR + '/images/' + nom):
|
||||
flash(u'Image déjà existante, merci de spécifier un autre nom de fichier', 'error')
|
||||
flash(u'Image déjà existante, merci de spécifier un autre nom de fichier', 'error')
|
||||
else:
|
||||
file, ext = os.path.splitext(nom)
|
||||
if ext in extensionimg :
|
||||
f.save(DOSSIER_PERSO + UTILISATEUR + '/images/' + nom)
|
||||
image=DOSSIER_PERSO + UTILISATEUR + '/images/' + nom
|
||||
with Image(filename=image) as img :
|
||||
img.transform(resize='x100')
|
||||
img.save(filename=DOSSIER_PERSO + UTILISATEUR + '/images/thumbnails/' + nom)
|
||||
if os.path.isfile(DOSSIER_PERSO + UTILISATEUR + '/images/' + nom) :
|
||||
file, ext = os.path.splitext(nom)
|
||||
if ext in extensionimg :
|
||||
f.save(DOSSIER_PERSO + UTILISATEUR + '/images/' + nom)
|
||||
image=DOSSIER_PERSO + UTILISATEUR + '/images/' + nom
|
||||
with Image.open(image) as img :
|
||||
img.thumbnail((300,300))
|
||||
img.save( DOSSIER_PERSO + UTILISATEUR + '/images/thumbnails/' + nom )
|
||||
if os.path.isfile(DOSSIER_PERSO + UTILISATEUR + '/images/' + nom) :
|
||||
if os.path.isfile(DOSSIER_PERSO + UTILISATEUR + '/images/thumbnails/' + nom):
|
||||
TIME=time.strftime("%A %d %B %Y %H:%M:%S")
|
||||
IP=request.environ['REMOTE_ADDR']
|
||||
CLIENT_PLATFORM=request.headers.get('User-Agent')
|
||||
LOG=open("log.txt", "a")
|
||||
LOG.write (TIME + ' - ' + IP + ' - ' + UTILISATEUR + ' - ' + CLIENT_PLATFORM + '\n' + '---> ' + nom + '\n')
|
||||
LOG.close()
|
||||
flash(u'Image envoyée et traitée avec succés', 'succes')
|
||||
TIME=time.strftime("%A %d %B %Y %H:%M:%S")
|
||||
IP=request.environ['REMOTE_ADDR']
|
||||
CLIENT_PLATFORM=request.headers.get('User-Agent')
|
||||
LOG=open("log.txt", "a")
|
||||
LOG.write (TIME + ' - ' + IP + ' - ' + UTILISATEUR + ' - ' + CLIENT_PLATFORM + '\n' + '---> ' + nom + '\n')
|
||||
LOG.close()
|
||||
flash(u'Image envoyée et traitée avec succés', 'succes')
|
||||
else:
|
||||
flash(u'Échec lors du traitement de l\'image', 'error')
|
||||
return redirect(url_for('filesupload.upload'))
|
||||
else:
|
||||
return redirect(url_for('filesupload.uploadfiles'))
|
||||
else:
|
||||
flash(u'Éches lors de l\'envoi de l\'image', 'error')
|
||||
return redirect(url_for('filesupload.upload'))
|
||||
else:
|
||||
f.save(DOSSIER_PERSO + UTILISATEUR + '/files/' + nom)
|
||||
if os.path.isfile(DOSSIER_PERSO + UTILISATEUR + '/files/' + nom) :
|
||||
return redirect(url_for('filesupload.uploadfiles'))
|
||||
else:
|
||||
f.save(DOSSIER_PERSO + UTILISATEUR + '/files/' + nom)
|
||||
if os.path.isfile(DOSSIER_PERSO + UTILISATEUR + '/files/' + nom) :
|
||||
TIME=time.strftime("%A %d %B %Y %H:%M:%S")
|
||||
IP=request.environ['REMOTE_ADDR']
|
||||
CLIENT_PLATFORM=request.headers.get('User-Agent')
|
||||
@ -63,17 +63,18 @@ def upload():
|
||||
LOG.close() # Ferme log.txt
|
||||
flash(u'Fichier envoyé avec succés', 'succes')
|
||||
#return redirect(url_for('filesupload.upload'))
|
||||
else:
|
||||
return redirect(url_for('filesupload.upload'))
|
||||
else:
|
||||
return redirect(url_for('filesupload.uploadfiles'))
|
||||
else:
|
||||
flash(u'Error : Vous avez oublié le fichier !', 'error')
|
||||
return redirect(url_for('filesupload.upload'))
|
||||
return redirect(url_for('filesupload.uploadfiles'))
|
||||
resp = make_response(render_template('up_up.html'))
|
||||
resp.set_cookie('username', session['username'])
|
||||
return resp
|
||||
else :
|
||||
return redirect(url_for('loginlogout.login', _external=True))
|
||||
|
||||
|
||||
@filesupload.route('/view/')
|
||||
def list():
|
||||
if 'username' in session :
|
||||
@ -89,6 +90,6 @@ def list():
|
||||
return render_template('up_list.html',size=size, i=i, listeFichiers=listeFichiers)
|
||||
else :
|
||||
flash(u'Aucun fichier uploadé ! Redirection vers Upload', 'error')
|
||||
return redirect(url_for('filesupload.upload', external=True))
|
||||
return redirect(url_for('filesupload.uploadfiles', external=True))
|
||||
else :
|
||||
return redirect(url_for('loginlogout.login', _external=True))
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
from flask import Blueprint, Flask, request, flash, render_template, url_for, session, redirect, abort, make_response, send_file, escape
|
||||
from flask_bcrypt import Bcrypt
|
||||
import sqlite3
|
||||
@ -15,7 +14,7 @@ inscription = Blueprint('inscription', __name__, template_folder='templates')
|
||||
@inscription.route( '/inscription/', methods=['GET','POST'] )
|
||||
def signin() :
|
||||
if 'username' in session :
|
||||
return redirect(url_for('upload'))
|
||||
return redirect(url_for('filesupload'))
|
||||
else :
|
||||
if request.method == 'POST' :
|
||||
conn = sqlite3.connect('base.db') # Connexion à la base de donnée
|
||||
|
@ -10,7 +10,7 @@ loginlogout = Blueprint('loginlogout', __name__, template_folder='templates')
|
||||
@loginlogout.route( '/login/', methods=['GET','POST'] )
|
||||
def login() :
|
||||
if 'username' in session :
|
||||
return redirect(url_for('filesupload.upload', _external=True))
|
||||
return redirect(url_for('filesupload.uploadfiles', _external=True))
|
||||
else :
|
||||
if request.method == 'POST' :
|
||||
conn = sqlite3.connect('base.db') # Connexion à la base de donnée
|
||||
@ -22,7 +22,7 @@ def login() :
|
||||
for i in users:
|
||||
if i[0] == request.form['user'] and bcrypt.check_password_hash(i[1], password) is True:
|
||||
session['username'] = request.form['user']
|
||||
return redirect(url_for('filesupload.upload', _external=True))
|
||||
return redirect(url_for('filesupload.uploadfiles', _external=True))
|
||||
return redirect(url_for('loginlogout.login', _external=True))
|
||||
else:
|
||||
return render_template('login.html')
|
||||
@ -31,4 +31,3 @@ def login() :
|
||||
def logout():
|
||||
session.pop('username', None) # Supprimer username de la session s'il s'y trouve
|
||||
return redirect(url_for('index'))
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
from flask import Blueprint, Flask, request, flash, render_template, url_for, session, redirect, abort, make_response, send_file, escape, flash, abort
|
||||
from werkzeug import secure_filename
|
||||
from werkzeug.utils import secure_filename
|
||||
from wand.image import Image
|
||||
import time
|
||||
import sqlite3
|
||||
|
Loading…
Reference in New Issue
Block a user