diff --git a/app.py b/app.py new file mode 100644 index 0000000..7b31903 --- /dev/null +++ b/app.py @@ -0,0 +1,90 @@ +from flask import Flask, render_template, redirect, request, url_for +from flask_sqlalchemy import SQLAlchemy +from werkzeug.security import generate_password_hash, check_password_hash + +app = Flask(__name__) + +app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///accounts.db' +app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False +app.secret_key = 'super_secret_session_encryption_key' +db = SQLAlchemy(app) + +class User(db.Model): + id = db.Column(db.Integer, primary_key=True) + username = db.Column(db.String(80), unique=True, nullable=False) + email = db.Column(db.String(120), unique=True, nullable=False) + password_hash = db.Column(db.String(128), nullable=False) + +with app.app_context(): + db.create_all() + + +@app.route('/submit-form', methods=['POST']) +def handle_submission(): + form_username = request.form.get('username') + form_email = request.form.get('email') + form_password = request.form.get('password') # 1. Grab password from HTML + + # Check for duplicates + if User.query.filter_by(username=form_username).first(): + return "

Username taken!

", 400 + if User.query.filter_by(email=form_email).first(): + return "

Email already registered!

", 400 + + # 2. Hash the password into a secure scramble + hashed_password = generate_password_hash(form_password) + + # 3. Save the user with the scrambled hash + new_user = User(username=form_username, email=form_email, password_hash=hashed_password) + db.session.add(new_user) + db.session.commit() + + return redirect(url_for('success')) + +@app.route('/success') +def success(): + return "

Data successfully saved to the database!

" + +@app.route('/users') +def view_users(): + # Fetch all user records from the database + all_users = User.query.all() + + # Create a simple HTML table to display them nicely + html_output = "

Registered Accounts

" + html_output += "" + + for user in all_users: + html_output += f"" + + html_output += "
IDUsernameEmail
{user.id}{user.username}{user.email}{user.password_hash}
" + + # If the database is completely empty + if not all_users: + return "

No accounts found in the database yet.

" + + return html_output + + +@app.route('/') +def home(): + return render_template('index.html') + +@app.route('/bivariate') +def bivariate(): + return render_template('bivariate.html') + +@app.route('/about') +def about(): + return render_template('about.html') + +@app.route('/signin') +def signin(): + return render_template('signin.html') + +@app.route('/signup') +def signup(): + return render_template('signup.html') + +if __name__ == '__main__': + app.run(debug=True) diff --git a/index.html b/index.html deleted file mode 100644 index 0d9af3f..0000000 --- a/index.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - Math Website - - - - -

Math website

-

with math

- - \ No newline at end of file diff --git a/instance/accounts.db b/instance/accounts.db new file mode 100644 index 0000000..d62d560 Binary files /dev/null and b/instance/accounts.db differ diff --git a/static/style.css b/static/style.css new file mode 100644 index 0000000..edc4ed6 --- /dev/null +++ b/static/style.css @@ -0,0 +1,59 @@ +* { + box-sizing: border-box; +} + +body { + margin: 0; + font-family: "Segoe UI", Roboto, Helvetica, Arial, sans-serif; + color: #1a1a1a; + background-color: #fafafa; + line-height: 1.6; +} + +h1, h2, h3 { + margin-top: 0; +} + +a { + color: #2563eb; +} + +a:hover { + color: #1d4ed8; +} + +.navbar { + list-style-type: none; + margin: 0; + padding: 0; + display: flex; + background-color: #333333; + position: fixed; + top: 0; + left: 0; + width: 100%; + z-index: 1000; +} + + +.navbar li { + flex: 0 0 auto; +} + +.navbar li a { + display: block; + color: white; + text-align: center; + padding: 14px 16px; + text-decoration: none; +} + +.navbar li a:hover { + background-color: #111111; +} + +main { + margin-top: 26px; + max-width: 800px; + padding: 32px 24px; +} diff --git a/style.css b/style.css deleted file mode 100644 index a01e018..0000000 --- a/style.css +++ /dev/null @@ -1,27 +0,0 @@ -ul { - list-style-type: none; - margin: 0; - padding: 0; - overflow: hidden; - background-color: #333333; -} - -ul li { - float: left; -} - -ul li a { - display: block; - color: white; - text-align: center; - padding: 14px 16px; - text-decoration: none; -} - -ul li a:hover { - background-color: #111111; -} - -body { - background-color: lightsteelblue; -} \ No newline at end of file diff --git a/about.html b/templates/about.html similarity index 79% rename from about.html rename to templates/about.html index 78cd4f5..ab3db9c 100644 --- a/about.html +++ b/templates/about.html @@ -1,5 +1,6 @@ - - +{% extends 'base.html' %} + +{% block content %} @@ -9,4 +10,5 @@

About this website

- \ No newline at end of file + +{% endblock %} \ No newline at end of file diff --git a/templates/base.html b/templates/base.html new file mode 100644 index 0000000..6de1853 --- /dev/null +++ b/templates/base.html @@ -0,0 +1,21 @@ + + + + + + {% block title %}Math Website{% endblock %} + + + + +
+ {% block content %}{% endblock %} +
+ + \ No newline at end of file diff --git a/bivariate.html b/templates/bivariate.html similarity index 94% rename from bivariate.html rename to templates/bivariate.html index 1ab6742..011c10b 100644 --- a/bivariate.html +++ b/templates/bivariate.html @@ -1,5 +1,8 @@ - - +{% extends 'base.html' %} + +{% block content %} + +
@@ -32,4 +35,8 @@
- \ No newline at end of file + + + + +{% endblock %} \ No newline at end of file diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..a05a401 --- /dev/null +++ b/templates/index.html @@ -0,0 +1,10 @@ +{% extends "base.html" %} +{% block content %} + +
+ +

homepage for math website wow

+ +
+ +{% endblock %} \ No newline at end of file diff --git a/templates/signin.html b/templates/signin.html new file mode 100644 index 0000000..ec9094b --- /dev/null +++ b/templates/signin.html @@ -0,0 +1,13 @@ +{% extends 'base.html' %} + +{% block content %} + + + + + + +

Sign in page with sql database

+ + +{% endblock %} \ No newline at end of file diff --git a/templates/signup.html b/templates/signup.html new file mode 100644 index 0000000..909a6c0 --- /dev/null +++ b/templates/signup.html @@ -0,0 +1,25 @@ +{% extends 'base.html' %} + +{% block content %} + + + + + + +

Sign up page with sql database

+
+ +

+ + +

+ + +

+ + +
+ + +{% endblock %} \ No newline at end of file diff --git a/test.html b/templates/test.html similarity index 100% rename from test.html rename to templates/test.html