Skip to content

Commit c130a8e

Browse files
author
Shafaf
committed
initial commit
0 parents  commit c130a8e

4 files changed

Lines changed: 172 additions & 0 deletions

File tree

app.py

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
from flask import Flask, request, render_template, url_for, flash, redirect
2+
from flask_sqlalchemy import SQLAlchemy
3+
from flask_migrate import Migrate
4+
from werkzeug.security import generate_password_hash, check_password_hash
5+
import os
6+
7+
# SQLAlchemy.
8+
pg_user = os.getenv("POSTGRES_USER", "postgres")
9+
pg_pass = os.getenv("POSTGRES_PASSWORD", "postgres")
10+
pg_host = os.getenv("POSTGRES_HOST", "postgres")
11+
pg_port = os.getenv("POSTGRES_PORT", "5432")
12+
pg_db = os.getenv("POSTGRES_DB", pg_user)
13+
14+
app = Flask(__name__, template_folder="./templates")
15+
16+
# db configuration
17+
app.config["SQLALCHEMY_DATABASE_URI"] = (
18+
f"postgresql://{pg_user}:{pg_pass}@localhost:{pg_port}/{pg_db}"
19+
)
20+
21+
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
22+
app.config["SECRET_KEY"] = "your-secret-key"
23+
24+
db = SQLAlchemy(app)
25+
migrate = Migrate(app, db)
26+
27+
28+
# User Model
29+
class User(db.Model):
30+
id = db.Column(db.Integer, primary_key=True)
31+
username = db.Column(db.String(80), unique=True, nullable=False)
32+
password = db.Column(db.String(520), nullable=False)
33+
34+
35+
class Student(db.Model):
36+
id = db.Column(db.Integer, primary_key=True)
37+
student_name = db.Column(db.String(200), nullable=False)
38+
student_age = db.Column(db.Integer, nullable=True)
39+
student_course = db.Column(db.String(200), nullable=True)
40+
41+
42+
# Routes
43+
@app.route("/")
44+
def index():
45+
return "Welcome you again"
46+
47+
48+
@app.route("/login", methods=["GET", "POST"])
49+
def login():
50+
if request.method == "POST":
51+
username = request.form["username"]
52+
password = request.form["password"]
53+
54+
user = User.query.filter_by(username=username).first()
55+
56+
if user and check_password_hash(user.password, password):
57+
flash("Login successful", "success")
58+
# You can redirect to a dashboard or profile page here
59+
return redirect(url_for("index"))
60+
else:
61+
flash("Invalid username or password", "danger")
62+
return render_template("login.html")
63+
64+
65+
@app.route("/register", methods=["GET", "POST"])
66+
def register():
67+
if request.method == "POST":
68+
username = request.form["username"]
69+
password = request.form["password"]
70+
71+
# check if the user is already registered
72+
existing_user = User.query.filter_by(username=username).first()
73+
print(existing_user)
74+
75+
if existing_user:
76+
flash("User name already exist, Please choose another", "danger")
77+
else:
78+
# create a new user
79+
new_user = User(
80+
username=username,
81+
password=generate_password_hash(password),
82+
)
83+
db.session.add(new_user)
84+
db.session.commit()
85+
flash("Registration successful. You can now log in.", "success")
86+
return redirect(url_for("login"))
87+
88+
else:
89+
return render_template("register.html")
90+
91+
92+
if __name__ == "__main__":
93+
app.run(debug=True)

docker-compose.yml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# just a postgres database for eazy testing
2+
3+
version: "3.7"
4+
5+
services:
6+
db:
7+
image: postgres:11.5-alpine
8+
restart: always
9+
environment:
10+
POSTGRES_USER: postgres
11+
POSTGRES_PASSWORD: postgres
12+
POSTGRES_DB: postgres
13+
ports:
14+
- 5432:5432
15+
volumes:
16+
- postgres:/var/lib/postgresql/data
17+
18+
volumes:
19+
postgres: {}

templates/login.html

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<!-- templates/login.html -->
2+
<!DOCTYPE html>
3+
<html lang="en">
4+
<head>
5+
<meta charset="UTF-8">
6+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
7+
<title>Login</title>
8+
</head>
9+
<body>
10+
<h2>Login</h2>
11+
{% with messages = get_flashed_messages() %}
12+
{% if messages %}
13+
<ul class="messages">
14+
{% for message in messages %}
15+
<li>{{ message }}</li>
16+
{% endfor %}
17+
</ul>
18+
{% endif %}
19+
{% endwith %}
20+
<form method="post" action="{{ url_for('login') }}">
21+
<label for="username">Username:</label>
22+
<input type="text" id="username" name="username" required>
23+
<br>
24+
<label for="password">Password:</label>
25+
<input type="password" id="password" name="password" required>
26+
<br>
27+
<button type="submit">Login</button>
28+
</form>
29+
</body>
30+
</html>

templates/register.html

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<!-- templates/register.html -->
2+
<!DOCTYPE html>
3+
<html lang="en">
4+
<head>
5+
<meta charset="UTF-8">
6+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
7+
<title>Register</title>
8+
</head>
9+
<body>
10+
<h2>Register</h2>
11+
{% with messages = get_flashed_messages() %}
12+
{% if messages %}
13+
<ul class="messages">
14+
{% for message in messages %}
15+
<li>{{ message }}</li>
16+
{% endfor %}
17+
</ul>
18+
{% endif %}
19+
{% endwith %}
20+
<form method="post" action="{{ url_for('register') }}">
21+
<label for="username">Username:</label>
22+
<input type="text" id="username" name="username" required>
23+
<br>
24+
<label for="password">Password:</label>
25+
<input type="password" id="password" name="password" required>
26+
<br>
27+
<button type="submit">Register</button>
28+
</form>
29+
</body>
30+
</html>

0 commit comments

Comments
 (0)