
Приложение
Приложение 1
from flask import Flask, request, render_template, redirect, url_for, session
import psycopg2
from psycopg2 import sql
import bcrypt
app = Flask(__name__)
app.secret_key = 'supersecretkey'
DB_CONFIG = {
'dbname': 'authdb',
'user': 'authuser',
'password': 'securepassword',
'host': 'localhost'
}
def init_db():
conn = psycopg2.connect(**DB_CONFIG)
cur = conn.cursor()
cur.execute("""
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
username VARCHAR(100) UNIQUE NOT NULL,
password_hash VARCHAR(200) NOT NULL
);
""")
conn.commit()
cur.close()
conn.close()
@app.route('/', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
conn = psycopg2.connect(**DB_CONFIG)
cur = conn.cursor()
cur.execute("SELECT password_hash FROM users WHERE username = %s", (username,))
user = cur.fetchone()
cur.close()
conn.close()
if user and bcrypt.checkpw(password.encode('utf-8'), user[0].encode('utf-8')):
session['username'] = username
return redirect(url_for('welcome'))
return "Неверное имя пользователя или пароль"
return render_template('login.html')
@app.route('/welcome')
def welcome():
if 'username' in session:
return f"Привет, {session['username']}!"
return redirect(url_for('login'))
@app.route('/register', methods=['GET', 'POST'])
def register():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
hashed_password = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt()).decode('utf-8')
conn = psycopg2.connect(**DB_CONFIG)
cur = conn.cursor()
try:
cur.execute("INSERT INTO users (username, password_hash) VALUES (%s, %s)", (username, hashed_password))
conn.commit()
except psycopg2.IntegrityError:
conn.rollback()
return "Имя пользователя уже существует"
finally:
cur.close()
conn.close()
return redirect(url_for('login'))
return render_template('login.html')
if __name__ == '__main__':
init_db()
app.run(host='0.0.0.0', port=8000)
Приложение 2
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Авторизация</title>
<style>
body {
background-color: #f0f8ff;
color: #000000;
font-family: Arial, sans-serif;
text-align: center;
padding: 50px;
}
form {
display: inline-block;
margin: auto;
text-align: left;
}
button {
cursor: pointer;
}
</style>
</head>
<body>
<h1>Добро пожаловать!</h1>
<form method="POST">
<label for="username">Имя:</label><br>
<input type="text" id="username" name="username" required><br><br>
<label for="password">Пароль:</label><br>
<input type="password" id="password" name="password" required><br><br>
<button type="submit">Вход</button>
</form>
<br><br>
<ahref="/register"><button type="button">Регистрация</button></a>
</body>
</html>