File size: 4,378 Bytes
f1d2cf1
 
 
 
 
 
 
 
 
 
 
 
 
 
8caf321
f1d2cf1
 
 
 
0e78cd8
f1d2cf1
0e78cd8
f1d2cf1
 
8caf321
f1d2cf1
 
 
 
0e78cd8
f1d2cf1
0e78cd8
f1d2cf1
 
 
 
 
0e78cd8
 
f1d2cf1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0e78cd8
f1d2cf1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0e78cd8
 
 
f1d2cf1
 
 
 
 
 
 
 
 
 
 
 
 
e782cf4
 
f1d2cf1
 
e782cf4
2a27a1c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import os
from flask import Flask, render_template, request, session, redirect, flash, url_for, jsonify
from flask_sqlalchemy import SQLAlchemy
from markupsafe import escape

BASE_DIR_PATH = os.path.abspath(os.path.dirname(__file__))
DATABASE_PATH = os.path.join(BASE_DIR_PATH, 'db.sqlite3')

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///'+DATABASE_PATH
app.config['SECRET_KEY'] = 'mysecretkey'
db = SQLAlchemy(app)

class Utente(db.Model):
    __tablename__ = 'utente'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    nickname = db.Column(db.String(80), unique=True, nullable=False)
    username = db.Column(db.String(80), unique=True, nullable=False)
    password = db.Column(db.String(30), nullable=False)
    # messaggi = db.relationship('Messaggio', backref=db.backref('utente', lazy='dynamic'))
    # --- OR ---
    messaggi = db.relationship('Messaggio', back_populates='utente', lazy='dynamic')

class Messaggio(db.Model):
    __tablename__ = 'messaggio'
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('utente.id'), nullable=False)
    messaggio = db.Column(db.Text, nullable=False)
    timestamp = db.Column(db.DateTime, default=db.func.now(), nullable=False)
    # utente = db.relationship('Utente', backref=db.backref('messaggi', lazy='dynamic'))
    # --- OR ---
    utente = db.relationship('Utente', back_populates='messaggi')


@app.route('/')
def home():
    if 'user_id' in session:
        utente = db.session.query(Utente).get(session['user_id'])
        return render_template('home.html', user=utente)
    return render_template('home.html')


@app.route('/guestbook')
def guestbook():
    if 'user_id' not in session:
        return redirect(url_for('login'))
    return render_template('guestbook.html')

@app.route('/api/guestbook', methods=['GET', 'POST'])
def api_guestbook():
    if 'user_id' not in session:
        return jsonify({'error': 'Accesso non autorizzato.'}), 401

    if request.method == 'POST':
        messaggio = request.json.get('messaggio')
        if not messaggio:
            return jsonify({'error': 'Il messaggio non può essere vuoto!'}), 400
        new_message = Messaggio(user_id=session['user_id'], messaggio=escape(messaggio))
        db.session.add(new_message)
        db.session.commit()
        return jsonify({'success': True}), 201

    messages = Messaggio.query.order_by(Messaggio.timestamp.desc()).all()
    response = [
        {'nickname': message.utente.nickname, 'messaggio': message.messaggio} 
        for message in messages
    ]
    return jsonify(response), 200



@app.route('/signup', methods=['GET', 'POST'])
def signup():
    if request.method == 'POST':
        nickname = request.form.get('nickname')
        username = request.form.get('username')
        password = request.form.get('password')
        if not nickname or not username or not password:
            flash('Tutti i campi sono obbligatori!')
            return redirect(url_for('signup'))
        if Utente.query.filter_by(username=username).first() or Utente.query.filter_by(nickname=nickname).first():
            flash("Il nickname o l'username sono già in uso!")
            return redirect(url_for('signup'))
        new_user = Utente(nickname=nickname, username=username, password=password)
        db.session.add(new_user)
        db.session.commit()
        flash('Registrazione effettuata con successo!')
        return redirect(url_for('login'))
    return render_template('signup.html')


@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        utente = Utente.query.filter_by(username=username, password=password).first()
        if utente:
            session['user_id'] = utente.id
            flash('Login riuscito!')
            return redirect(url_for('guestbook'))
        else:
            flash('Credenziali non valide!')
            return redirect(url_for('login'))
    return render_template('login.html')

@app.route('/logout')
def logout():
    session.pop('user_id', None)
    flash('Logout effettuato con successo!')
    return redirect(url_for('home'))

with app.app_context():
    db.create_all()

if __name__ == '__main__':

    app.run(host="0.0.0.0", port=7860)