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 120 121 122 123 124 125
| from flask import Flask, abort, render_template_string, request, render_template, redirect, url_for, session, flash, g from utils import rot13, key import sqlite3
app = Flask(__name__) app.secret_key = 'your_secret_key' app.config['DATABASE'] = 'database.db'
def get_db(): db = getattr(g, '_database', None) if db is None: db = g._database = sqlite3.connect(app.config['DATABASE']) return db
@app.teardown_appcontext def close_connection(exception): db = getattr(g, '_database', None) if db is not None: db.close()
@app.route('/') def home(): return render_template('home.html')
@app.route('/rot13', methods=['GET', 'POST']) def rot13_route(): if request.method == 'POST': action = request.form['action'] text = request.form['text']
if action == 'encrypt': encrypted_text = rot13(text) return redirect(url_for('rot13_result', result=encrypted_text, action='encrypt'))
elif action == 'decrypt': text = request.form['text'] decrypted_text = rot13(text) if key(decrypted_text): template = '<h1>Your decrypted text is: {{%s}}</h1>' % decrypted_text try: render_template_string(template) except Exception as e: abort(404) return redirect(url_for('rot13_result', result="既然你是黑阔,那我凭什么给你回显", action='decrypt'))
else: return redirect(url_for('rot13_result', result=decrypted_text, action='decrypt')) template = '<h1>Your decrypted text is: %s</h1>' % decrypted_text return render_template_string(template)
return render_template('index.html')
@app.route('/rot13_result/<action>/<result>') def rot13_result(action, result): return render_template('rot13_result.html', action=action, result=result)
@app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': username = request.form['username'] password = request.form['password'] db = get_db() cursor = db.cursor() cursor.execute("SELECT * FROM users WHERE username = ? AND password = ?", (username, password)) user = cursor.fetchone() if user: session['username'] = username return redirect(url_for('message_board')) else: flash('Invalid username or password') return render_template('login.html')
@app.route('/register', methods=['GET', 'POST']) def register(): if request.method == 'POST': username = request.form['username'] password = request.form['password'] db = get_db() cursor = db.cursor() try: cursor.execute("INSERT INTO users (username, password) VALUES (?, ?)", (username, password)) db.commit() flash('Registration successful! Please log in.') return redirect(url_for('login')) except sqlite3.IntegrityError: flash('Username already exists!') return render_template('register.html')
@app.route('/message_board', methods=['GET', 'POST']) def message_board(): if 'username' not in session: return redirect(url_for('login'))
db = get_db() cursor = db.cursor()
if request.method == 'POST': message = request.form['message'] cursor.execute("INSERT INTO messages (username, message) VALUES (?, ?)", (session['username'], message)) db.commit()
cursor.execute("SELECT username, message FROM messages") messages = cursor.fetchall()
return render_template('message_board.html', messages=messages)
@app.route('/logout') def logout(): session.pop('username', None) return redirect(url_for('home'))
if __name__ == '__main__': app.run(host='0.0.0.0', port=5000, debug=True)
|