Premier commit
This commit is contained in:
0
views/__init__.py
Normal file
0
views/__init__.py
Normal file
105
views/blog.py
Normal file
105
views/blog.py
Normal file
@@ -0,0 +1,105 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
|
||||
from flask import Blueprint, escape, render_template, session, redirect, url_for, request, flash, abort
|
||||
import time
|
||||
import sqlite3
|
||||
|
||||
blog = Blueprint('blog', __name__, template_folder='templates')
|
||||
|
||||
# Un bon gros bug de flask il ne faut pas mettre le meme nom d'une parti ici
|
||||
# a une fonction sinon ca fait une erreur
|
||||
# k/app.py", line 958, in register_blueprint
|
||||
# if blueprint.name in self.blueprints:
|
||||
#https://github.com/pallets/flask/issues/1327
|
||||
|
||||
@blog.route('/blog/', methods=['GET', 'POST'])
|
||||
def racine_blog():
|
||||
if 'username' in session:
|
||||
UTILISATEUR='%s'% escape(session['username'])
|
||||
if request.method == 'POST':
|
||||
title= request.form['title']
|
||||
content = request.form['content']
|
||||
#category = request.form['category']
|
||||
status = request.form['status']
|
||||
TIME=time.strftime("%A %d %B %Y %H:%M:%S")
|
||||
conn = sqlite3.connect('base.db') # Connexion la base de donne
|
||||
cursor = conn.cursor() # Création de l'objet "curseur"
|
||||
cursor.execute("""INSERT INTO posts(title, content, time, author, status) VALUES(?, ?, ?, ?, ?)""", (title, content, TIME, UTILISATEUR, status)) # Insérer des valeurs
|
||||
conn.commit()
|
||||
cursor.execute("""SELECT title, content, time, author, status, avatar, nom, prenom, age, profession FROM posts INNER JOIN users ON author = name AND status='public'""")
|
||||
posts = [dict(title=row[0], content=row[1], time=row[2], author=row[3], status=row[4], avatar=row[5], nom=row[6], prenom=row[7], age=row[8], profession=row[9]) for row in reversed(cursor.fetchall())]
|
||||
conn.close()
|
||||
return render_template('blog.html', posts=posts)
|
||||
else:
|
||||
conn = sqlite3.connect('base.db') # Connexion à la base de donnée
|
||||
cursor = conn.cursor() # Création de l'objet "curseur"
|
||||
cursor.execute("""SELECT title, content, time, author, status, avatar, nom, prenom, age, profession FROM posts INNER JOIN users ON author = name AND status='public'""")
|
||||
posts = [dict(title=row[0], content=row[1], time=row[2], author=row[3], status=row[4], avatar=row[5], nom=row[6], prenom=row[7], age=row[8], profession=row[9]) for row in reversed(cursor.fetchall())]
|
||||
conn.close()
|
||||
return render_template('blog.html', posts=posts)
|
||||
else:
|
||||
return redirect(url_for('loginlogout.login', _external=True))
|
||||
|
||||
@blog.route('/blog/<username>')
|
||||
def members(username):
|
||||
conn = sqlite3.connect('base.db') # Connexion à la base de donnée
|
||||
cursor = conn.cursor() # Création de l'objet "curseur"
|
||||
cursor.execute("""SELECT title, content, time, author, status FROM posts WHERE author=? AND status='public'""", (username,))
|
||||
posts = [dict(title=row[0], content=row[1], time=row[2], author=row[3], status=row[4]) for row in reversed(cursor.fetchall())]
|
||||
cursor.execute("""SELECT avatar, nom, prenom, age, profession FROM users WHERE name=?""", (username,))
|
||||
usersinfos = (cursor.fetchone())
|
||||
conn.close()
|
||||
return render_template('publicblog.html', username=username, posts=posts, usersinfos=usersinfos)
|
||||
|
||||
@blog.route('/privateblog/')
|
||||
def privateblog():
|
||||
UTILISATEUR='%s'% escape(session['username'])
|
||||
if 'username' in session :
|
||||
conn = sqlite3.connect('base.db') # Connexion à la base de donnée
|
||||
cursor = conn.cursor() # Création de l'objet "curseur"
|
||||
cursor.execute("""SELECT title, content, time, author, status FROM posts WHERE author=? AND status='prive'""", (UTILISATEUR,))
|
||||
posts = [dict(title=row[0], content=row[1], time=row[2], author=row[3], status=row[4]) for row in reversed(cursor.fetchall())]
|
||||
cursor.execute("""SELECT avatar, nom, prenom, age, profession FROM users WHERE name=?""", (UTILISATEUR,))
|
||||
usersinfos = (cursor.fetchone())
|
||||
conn.close()
|
||||
return render_template('privateblog.html', UTILISATEUR=UTILISATEUR, posts=posts, usersinfos=usersinfos)
|
||||
else:
|
||||
return redirect(url_for('loginlogout.login', _external=True)) # sinon on redirige vers login
|
||||
|
||||
@blog.route('/delete/<post>')
|
||||
def delete(post):
|
||||
if 'username' in session :
|
||||
conn = sqlite3.connect('base.db') # Connexion à la base de donnée
|
||||
cursor = conn.cursor() # Création de l'objet "curseur"
|
||||
cursor.execute("""DELETE FROM posts WHERE title=?""", (post,))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
return redirect(url_for('blog.racine_blog'))
|
||||
else:
|
||||
return redirect(url_for('loginlogout.login', _external=True)) # sinon on redirige vers login
|
||||
|
||||
@blog.route('/edit/<post>', methods=['GET', 'POST'])
|
||||
def edit(post):
|
||||
if 'username' in session :
|
||||
if request.method == 'POST' :
|
||||
newtitle = request.form['title']
|
||||
newcontent = request.form['content']
|
||||
newstatus = request.form['status']
|
||||
conn = sqlite3.connect('base.db')
|
||||
cursor = conn.cursor()
|
||||
cursor.execute("""UPDATE posts SET title=?, content=?, status=? WHERE title=?""", (newtitle, newcontent, newstatus, post,))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
return redirect(url_for('blog.racine_blog'))
|
||||
else:
|
||||
conn = sqlite3.connect('base.db') # Connexion à la base de donnée
|
||||
cursor = conn.cursor() # Création de l'objet "curseur"
|
||||
cursor.execute("""SELECT title, content FROM posts WHERE title=?""", (post,))
|
||||
oldpost = (cursor.fetchone())
|
||||
conn.close()
|
||||
return render_template('postedit.html', oldpost=oldpost)
|
||||
else:
|
||||
return redirect(url_for('loginlogout.login', _external=True)) # sinon on redirige vers login)
|
||||
|
||||
|
||||
94
views/filesupload.py
Normal file
94
views/filesupload.py
Normal file
@@ -0,0 +1,94 @@
|
||||
# -*- 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
|
||||
import time
|
||||
import sqlite3
|
||||
import os
|
||||
|
||||
|
||||
|
||||
|
||||
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():
|
||||
if 'username' in session :
|
||||
UTILISATEUR='%s'% escape(session['username'])
|
||||
if request.method == 'POST' :
|
||||
files = request.files.getlist('fic')
|
||||
for f in files :
|
||||
if f: # On vérifie qu'un fichier a bien été envoyé
|
||||
nom = secure_filename(f.filename)
|
||||
if os.path.isfile(DOSSIER_PERSO + UTILISATEUR + '/files/' + nom):
|
||||
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')
|
||||
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) :
|
||||
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')
|
||||
else:
|
||||
flash(u'Échec lors du traitement de l\'image', 'error')
|
||||
return redirect(url_for('filesupload.upload'))
|
||||
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) :
|
||||
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") # Ouvre fichier log.txt
|
||||
LOG.write (TIME + ' - ' + IP + ' - ' + UTILISATEUR + ' - ' + CLIENT_PLATFORM + '\n' + '---> ' + nom + '\n') # Écrit dans log
|
||||
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:
|
||||
flash(u'Error : Vous avez oublié le fichier !', 'error')
|
||||
return redirect(url_for('filesupload.upload'))
|
||||
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 :
|
||||
UTILISATEUR='%s'% escape(session['username'])
|
||||
i = 0
|
||||
fichiers = os.listdir(DOSSIER_PERSO + UTILISATEUR + '/files/')
|
||||
listeFichiers = []
|
||||
if fichiers:
|
||||
for fich in fichiers:
|
||||
i += 1
|
||||
size = os.path.getsize(DOSSIER_PERSO + UTILISATEUR + '/files/' + fich) # size = taille des fichiers
|
||||
listeFichiers.append([i, fich, size]) # On implémente la listeFichiers avec le num le ficier et sa taille
|
||||
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))
|
||||
else :
|
||||
return redirect(url_for('loginlogout.login', _external=True))
|
||||
64
views/inscription.py
Normal file
64
views/inscription.py
Normal file
@@ -0,0 +1,64 @@
|
||||
|
||||
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
|
||||
import glob, os, sys, time
|
||||
|
||||
|
||||
app = Flask( 'pywallter' )
|
||||
bcrypt = Bcrypt(app)
|
||||
|
||||
DOSSIER_PERSO='users/'
|
||||
|
||||
inscription = Blueprint('inscription', __name__, template_folder='templates')
|
||||
|
||||
@inscription.route( '/inscription/', methods=['GET','POST'] )
|
||||
def signin() :
|
||||
if 'username' in session :
|
||||
return redirect(url_for('upload'))
|
||||
else :
|
||||
if request.method == 'POST' :
|
||||
conn = sqlite3.connect('base.db') # Connexion à la base de donnée
|
||||
cursor = conn.cursor() # Création de l'objet "curseur"
|
||||
user = request.form['user']
|
||||
mail = request.form['mail']
|
||||
passwd = bcrypt.generate_password_hash(request.form['passwd'])
|
||||
passwdconfirm = request.form['passwdconfirm']
|
||||
cursor.execute("""SELECT name FROM users WHERE name=?""", (user,))
|
||||
testuser=cursor.fetchone()
|
||||
cursor.execute("""SELECT mail FROM users WHERE mail=?""", (mail,))
|
||||
testmail=cursor.fetchone()
|
||||
conn.close()
|
||||
if testuser or testmail:
|
||||
flash(u'Non d\'utilisateur ou email déjà utilisé, merci d\'en choisir un autre', 'error')
|
||||
return render_template('inscription.html')
|
||||
else:
|
||||
confirmation = bcrypt.check_password_hash(passwd, passwdconfirm)
|
||||
if confirmation is True:
|
||||
conn = sqlite3.connect('base.db') # Connexion à la base de donnée
|
||||
cursor = conn.cursor() # Création de l'objet "curseur"
|
||||
cursor.execute("""INSERT INTO users(name, mail, passwd) VALUES(?, ?, ?)""", (user, mail, passwd)) # Insérer des valeurs
|
||||
conn.commit() # Sauvegarder valeurs dans la bdd
|
||||
cursor.execute("""SELECT name, mail, passwd FROM users""")
|
||||
users = cursor.fetchall()
|
||||
for i in users:
|
||||
i = print('{0} - {1} - {2}'.format(i[0], i[1], i[2]))
|
||||
conn.close()
|
||||
userracine = DOSSIER_PERSO + user
|
||||
userfiles = userracine + '/files'
|
||||
userimages = userracine + '/images'
|
||||
userthumbnails = userracine + '/images/thumbnails'
|
||||
userprofile = userracine + '/profile'
|
||||
if not os.path.exists(userracine):
|
||||
os.makedirs(userracine)
|
||||
os.makedirs(userfiles)
|
||||
os.makedirs(userimages)
|
||||
os.makedirs(userthumbnails)
|
||||
os.makedirs(userprofile)
|
||||
flash(u'Inscription réalisée avec succés !', 'succes')
|
||||
return render_template('login.html')
|
||||
else:
|
||||
flash(u'Les mots de passe ne sont pas identiques !', 'error')
|
||||
return render_template('inscription.html')
|
||||
else :
|
||||
return render_template('inscription.html')
|
||||
34
views/loginlogout.py
Normal file
34
views/loginlogout.py
Normal file
@@ -0,0 +1,34 @@
|
||||
from flask import Blueprint, Flask, request, flash, render_template, url_for, session, redirect, abort, make_response, send_file, escape
|
||||
import sqlite3
|
||||
from flask_bcrypt import Bcrypt
|
||||
|
||||
app = Flask( 'pywallter' )
|
||||
bcrypt = Bcrypt(app)
|
||||
|
||||
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))
|
||||
else :
|
||||
if request.method == 'POST' :
|
||||
conn = sqlite3.connect('base.db') # Connexion à la base de donnée
|
||||
cursor = conn.cursor() # Création de l'objet "curseur"
|
||||
cursor.execute("""SELECT name, passwd FROM users""")
|
||||
users = cursor.fetchall()
|
||||
conn.close()
|
||||
password = request.form['passwd']
|
||||
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('loginlogout.login', _external=True))
|
||||
else:
|
||||
return render_template('login.html')
|
||||
|
||||
@loginlogout.route( '/logout/' )
|
||||
def logout():
|
||||
session.pop('username', None) # Supprimer username de la session s'il s'y trouve
|
||||
return redirect(url_for('index'))
|
||||
|
||||
16
views/logs.py
Normal file
16
views/logs.py
Normal file
@@ -0,0 +1,16 @@
|
||||
from flask import Blueprint, Flask, request, flash, render_template, url_for, session, redirect, abort, make_response, send_file, escape
|
||||
import glob, os, sys
|
||||
|
||||
logs = Blueprint('logs', __name__, template_folder='templates')
|
||||
|
||||
@logs.route('/logs/')
|
||||
def logfile():
|
||||
if 'username' in session :
|
||||
with open('log.txt', 'r') as log:
|
||||
logs=log.readlines()
|
||||
log.close()
|
||||
for line in logs:
|
||||
return render_template('logs.html', logs=logs, line=line)
|
||||
else :
|
||||
return redirect(url_for('loginlogout.login', _external=True))
|
||||
|
||||
80
views/profil.py
Normal file
80
views/profil.py
Normal file
@@ -0,0 +1,80 @@
|
||||
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
|
||||
import time
|
||||
import sqlite3
|
||||
import os
|
||||
|
||||
profil = Blueprint('profil', __name__, template_folder='templates')
|
||||
|
||||
DOSSIER_PERSO='users/'
|
||||
extensionimg = {'.jpg', '.JPG', '.png', '.PNG', '.gif', '.GIF', '.bmp', '.BMP', '.jpeg', '.JPEG' }
|
||||
|
||||
@profil.route('/profil/<username>/', methods=['GET','POST'] )
|
||||
def profile(username=None) :
|
||||
if 'username' in session :
|
||||
UTILISATEUR='%s' % escape(session['username'])
|
||||
conn = sqlite3.connect('base.db') # Connexion à la base de donnée
|
||||
cursor = conn.cursor() # Création de l'objet "curseur"
|
||||
cursor.execute("""SELECT avatar FROM users WHERE name=?""", (username,))
|
||||
imageprofil = cursor.fetchone()
|
||||
conn.close()
|
||||
if request.method == 'POST' :
|
||||
f = request.files['fic']
|
||||
nom = request.form['nom']
|
||||
prenom = request.form['prenom']
|
||||
age = request.form['age']
|
||||
profession = request.form['profession']
|
||||
if f: # On vérifie qu'un fichier a bien été envoyé
|
||||
nom = secure_filename(f.filename)
|
||||
f.save(DOSSIER_PERSO + UTILISATEUR + '/profile/' + nom)
|
||||
image = DOSSIER_PERSO + UTILISATEUR + '/profile/' + nom
|
||||
with Image(filename = image) as img:
|
||||
img.transform(resize='x80')
|
||||
img.save(filename = DOSSIER_PERSO + UTILISATEUR + '/profile/' + nom)
|
||||
imagelocation = DOSSIER_PERSO + UTILISATEUR + '/profile/' + nom
|
||||
conn = sqlite3.connect('base.db') # Connexion à la base de donnée
|
||||
cursor = conn.cursor() # Création de l'objet "curseur"
|
||||
cursor.execute("UPDATE users SET avatar=? WHERE name=?", (imagelocation, username))
|
||||
conn.commit()
|
||||
cursor.execute("""SELECT avatar FROM users WHERE name=?""", (username,))
|
||||
imageprofil = cursor.fetchone()
|
||||
conn.close()
|
||||
flash(u'Image de profil mise à jour', 'succes')
|
||||
return render_template('profil.html', imageprofil=imageprofil, username=username)
|
||||
else:
|
||||
# return render_template('profil.html', imageprofil=imageprofil, username=username)
|
||||
####### Informations personnelles #######
|
||||
if nom:
|
||||
if prenom:
|
||||
if age:
|
||||
if profession:
|
||||
conn = sqlite3.connect('base.db') # Connexion à la base de donnée
|
||||
cursor = conn.cursor() # Création de l'objet "curseur"
|
||||
cursor.execute("UPDATE users SET nom=?, prenom=?, age=?, profession=? WHERE name=?""", (nom, prenom, age, profession, username,))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
flash(u'Informations transmisent à la base', 'succes')
|
||||
return render_template('profil.html', imageprofil=imageprofil, username=username)
|
||||
else:
|
||||
flash(u'Veuillez renseigner une profession', 'error')
|
||||
return render_template('profil.html', imageprofil=imageprofil, username=username)
|
||||
else:
|
||||
flash(u'Veuillez renseigner votre âge', 'error')
|
||||
return render_template('profil.html', imageprofil=imageprofil, username=username)
|
||||
else:
|
||||
flash(u'Veuillez renseigner votre prénom', 'error')
|
||||
return render_template('profil.html', imageprofil=imageprofil, username=username)
|
||||
else:
|
||||
flash(u'Veuillez renseigner votre nom', 'error')
|
||||
return render_template('profil.html', imageprofil=imageprofil, username=username)
|
||||
else:
|
||||
conn = sqlite3.connect('base.db') # Connexion à la base de donnée
|
||||
cursor = conn.cursor() # Création de l'objet "curseur"
|
||||
cursor.execute("""SELECT avatar FROM users WHERE name=?""", (username,))
|
||||
imageprofil = cursor.fetchone()
|
||||
conn.close()
|
||||
return render_template('profil.html', imageprofil=imageprofil, username=username)
|
||||
|
||||
else :
|
||||
return redirect(url_for('loginlogout.login', _external=True))
|
||||
Reference in New Issue
Block a user