From cf4a611231416cb95562e2bdd0465164d6720fc3 Mon Sep 17 00:00:00 2001 From: ScriptSorcerer20 Date: Wed, 4 Mar 2026 22:16:50 +0100 Subject: [PATCH] implemented basis of login, missing database connection. --- app/__init__.py | 24 ++++++--- app/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 1696 bytes app/models/__pycache__/user.cpython-311.pyc | Bin 0 -> 1402 bytes app/models/user.py | 14 +++++ .../__pycache__/login_routes.cpython-311.pyc | Bin 0 -> 3090 bytes .../__pycache__/main_routes.cpython-311.pyc | Bin 0 -> 583 bytes app/routes/login_routes.py | 49 ++++++++++++++++++ app/templates/login.html | 41 +++++++++++++++ app/templates/sign_up.html | 41 +++++++++++++++ database_setup.sql | 7 +++ requirements.txt | Bin 268 -> 518 bytes 11 files changed, 170 insertions(+), 6 deletions(-) create mode 100644 app/__pycache__/__init__.cpython-311.pyc create mode 100644 app/models/__pycache__/user.cpython-311.pyc create mode 100644 app/models/user.py create mode 100644 app/routes/__pycache__/login_routes.cpython-311.pyc create mode 100644 app/routes/__pycache__/main_routes.cpython-311.pyc create mode 100644 app/routes/login_routes.py create mode 100644 app/templates/login.html create mode 100644 app/templates/sign_up.html create mode 100644 database_setup.sql diff --git a/app/__init__.py b/app/__init__.py index 6c3fb29..962ebc1 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -1,18 +1,30 @@ from flask import Flask +from flask_sqlalchemy import SQLAlchemy +from flask_login import LoginManager + +db = SQLAlchemy() +login_manager = LoginManager() def create_app(): app = Flask(__name__) - # Basic config + app.config["SQLALCHEMY_DATABASE_URI"] = "" app.config["SECRET_KEY"] = "dev-secret-key" - # # ---- Register Blueprints (Routes) ---- - # from .routes.auth_routes import auth_bp - # from .routes.solver_routes import solver_bp + db.init_app(app) + login_manager.init_app(app) + login_manager.login_view = "login.login" + + from .models.user import User + + @login_manager.user_loader + def load_user(user_id): + return db.session.get(User, int(user_id)) + + from .routes.login_routes import login_bp from .routes.main_routes import main_bp - # app.register_blueprint(auth_bp) - # app.register_blueprint(solver_bp) + app.register_blueprint(login_bp) app.register_blueprint(main_bp) return app diff --git a/app/__pycache__/__init__.cpython-311.pyc b/app/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2e91d73ebe681622671ba764148efcd05be020f6 GIT binary patch literal 1696 zcma)6-D}%c6u*+LY{ic4HqBZH+1xFL&a8IH_OLNRndf@6`C_YESdE!btQ$wEWP4X~ zM}iZ);n5EY>tLmQOkvAf^3TY_P$MX~j69URc;sdDY3E9|6QwYAxjOgU^L3AYKVAJE ziG&c0#FMAmUpzv8vdwV7-W>;D!}18JNab{7a0QNIIQ(6J#FL=N$Y2)huy z=VgK{1i&U9vjtV$LIp_`^C%g3#bT43BYvSP=1ovS`L7l;dTEUq8?YN+td_OPl2TF1 zgqB8iK@kSe!8V7`ZTtvXunvbc>>doeVBZ`0w%|P)Xno{Y`8kMD1)mKwn-v&VLudyd z>W5n6SZxkjE}mY*|IJawqgnFkR5hRm^`If$!~VMKW5W*a;8jkQT9O~%Ee$msHI;^;q{;HmHeb(`J}u@;YjvFz7xI^jS1x^-DJrEkE2Sz1sidqrp$19S zXmv#=Mp3ENin6R#G)tD#wGC%XuPUm{>TbRb7%3K!AtXJgS4)a+UIc6g?n!oJ9K=6O zv>!WpfAgp9d)trI-?C4GPZob&Y{zChu~}Q1J%A8~qvWD0uhc*f8j4n7YK*dr<4Cex zf#zh{36!dpRjo`TuGwu1j&~wnvfYSq0 zxihjVC*J(#Df7@X6JL2i_@g$CcW~Us@oxP5k4qgq-NWzN{<$wsbi{Z1JSTqG zM?UelfCBN6FM!0fjZ;Tw7k^;;XAcJlM}N}Bi4IQKIME&1K5pZg4xX{`OfMX5&QtbD zEGNetah3f&J!((5x@>-{E8cIEvY(d|_RKDilp*LcPN$g0PEB+(_E~N J-V|;x{{pP=h9Lj| literal 0 HcmV?d00001 diff --git a/app/models/__pycache__/user.cpython-311.pyc b/app/models/__pycache__/user.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..656c1fae5076128fb55432a0956d57370bb4a827 GIT binary patch literal 1402 zcmaJ>&ug;E+QOsT7GIjFgi}l^g&e!C%1HmVB`0RH-N5Ql+O{+Bb1FGzR5)=gs%#&Aj>E zd%J#>PA3t_*0XJUNJ8i@VMG!;0{gcCJVOK#>>w8#7$YJP*^yk?kTH_b&xj~b5mBj3 z@uCtPZvxsmwhWcTW>7BPgIiDzbBWCL#7=;T`#xn;_Cwn%M`y*X9vS-;EUu@>zyui* z!GpL<1y`nio2bHRsUYzu?JXCRp_z9%6n5 zLi|dZNod6iouGVNV{nVwim`tI6uesaH?#<-FE5~rFJ)jOPd|#?6nw56;9I~&6RbST zrGOQmIu&2UymIhE`9^7`ybwCHba&=XX|izd$C6cE2u2C)^+tn`GMA3lSQVJMC975| zxm7|Pza-*audQ&+G#RZi(|nW`*IkcHQCR;xs5z@0%KJ{lJyP91aULW7MvHfi;G1g9ubrNIsd{@7)%GOpkhc~m0;jQuKml~J0 zgAcT&7utHEqZjITPVV^T`Q^st*VkJ5L|dQe=o8>ionOtbO|IMPa~t-S{JXc|ZO?uv zwo>_aD&I-v>&0&7;(B&tcyqk*{cHAa`TgU!kKa6b_oS66wll>}rda=FPr+(#4}Grs zDT?f-b1{zk6&ei<`;fwaalA~& literal 0 HcmV?d00001 diff --git a/app/models/user.py b/app/models/user.py new file mode 100644 index 0000000..106078a --- /dev/null +++ b/app/models/user.py @@ -0,0 +1,14 @@ +from .. import db +from flask_login import UserMixin + +class User(UserMixin, db.Model): + __tablename__ = "users" + + id = db.Column(db.Integer, primary_key=True) + username = db.Column(db.String(20), unique=True, nullable=False) + password = db.Column(db.String(255), nullable=False) # <- größer! + email = db.Column(db.String(120), unique=True, nullable=False) + created_at = db.Column(db.DateTime, server_default=db.func.now()) + + def __repr__(self): + return f"" diff --git a/app/routes/__pycache__/login_routes.cpython-311.pyc b/app/routes/__pycache__/login_routes.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0e5e1549b34827875fff64e0d52f43921485c27b GIT binary patch literal 3090 zcmb_e-)q}O96!l+EL*naRB4hXY2r0qTes96X_K`fgl=rK-Jt8@?gu7d9P1i8k!|GiBt`}b6K51Q&MJ<$LvhBP ziYxA7=o%|`Dekyi;o_V%cE}#Z8}}01DY;}`@x^_X-6i{#Ks>+z7C=UFLt%pjV2k`3 zEgpoya(8poewR4OBYEf9ZQdRs`5u4`;<(jvjvskr4*wf+1P*vzeGN% zs&{ipN~Du&8jGnkOfA|c!wmMyx%o^sQBWazPEjFK&acRT+*xT3yR7A+CyL;FM%5s~ zj;o*E!p@st#BLE6w*s|vPEu1XFo;1Pq=WqS?vR9!fY!FQz%&OEvuHhpH3kjXJX(*Y zOmiG)61zciY_;+%+w;FI+R+is9O}QF9nq}D?Qd|QS-_x7O8a0dfo+#PzU)5e1v-ig zb!%)=)Oz-P7Wk%J_BE~c zd#M8j2D~BK-yYSp?bIQ$$D1nvXe0Z!6{ zLKHRZR-vk9a#`$1N)ql$hcnu?Z|tjzg(MZ_H)kU5nK!-B5_OmseAh zv$0gVAj8?uW7lS{e{%Dq*<>oMotMagv*$IkHwB*0quiVfmDyxIKZ|k&4XU#Zjc5!a z`6a414K+aTljO9%RF*LEKB&0^558aTt++=F_sFg|@NjBJ9Ic3><s{Fup)?eLc>{3U~*H2KLoU_7^& zUGYSDTE9G_i!notnPN=$#cBf|Jnc6ICe4A#6`>~fRgWI89z9t-(pPsod%Q0I>HenO z3ipo>c=%QC&w-x;YxfK;WO5;$3+-~=RqqaWtil~LxIvQ})VaZ$(D&F~_8a{Xvp-@8 zQB#QOT(rgytWO*KS(87jJJ0SBC_u3*Y5|s_gJz>off8=-cLLPgL=pXVC|UZyCGl{g z)*%P)B5KQQiA7i1DO_R~S~5i>jL7)@I~twSDA8WEQpahDg!DDnh=d&5x1|ob?Gy=Z zu+8`N!fNyAj1PMnBGbmjUXrmGAo7xpNQ97cxg?T`jaO_#Uxuz{?VL#A&?_YLiegO9K3CodX9p>cm{)QVl+_5uup#5GRGLd9=&K@;z+6Ki z=knNPsidWg7Q|10wJi(tm)sOdMdWuHjgiFk8%CucyLAV{Fja6(f48d&uIsP6s^Elf zzp7wZw_jDzt=q3>e9y||wQttb27lV*Pv7UBF`gfXe;8il%W(7Sa^n85!Hk>Cc%AKK v&eZ|wUN`_d(V7_ptk?4A%Hx}-%2Db+W-?=S*3X3NfOORVf^Ei{ws83m*SCUJ literal 0 HcmV?d00001 diff --git a/app/routes/__pycache__/main_routes.cpython-311.pyc b/app/routes/__pycache__/main_routes.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3c156e5c79565b17a92c7249c1e06d7ab1574f6d GIT binary patch literal 583 zcmZuuze~eF6n=L}ZJQzrbrJ-ZLIYNJ5y2mbB8bqf1Vikdw3n+bx5j=@G3Z`E{3t@XqKxu*{ieOHBD8{5w zdflyaUsk;^nv&dOT-qTQzUzcM(uGs?hGePya~py7or8G<4G4d{0DJ%Ijy`nn+^C}J z>0%`mu1TaC_z4DBVYs!iY!%Cuy34KI; + + + + + + Login + + + + + +

Login to your account

+ + {% if error %} +

{{ error }}

+ {% endif %} + +
+ + + + + +
+ + + \ No newline at end of file diff --git a/app/templates/sign_up.html b/app/templates/sign_up.html new file mode 100644 index 0000000..09e9a04 --- /dev/null +++ b/app/templates/sign_up.html @@ -0,0 +1,41 @@ + + + + + + + Sign Up + + + + + +

Create an account

+ + {% if error %} +

{{ error }}

+ {% endif %} + +
+ + + + + +
+ + + \ No newline at end of file diff --git a/database_setup.sql b/database_setup.sql new file mode 100644 index 0000000..e1be1a2 --- /dev/null +++ b/database_setup.sql @@ -0,0 +1,7 @@ +CREATE TABLE users ( + id INT AUTO_INCREMENT PRIMARY KEY, + username VARCHAR(20) NOT NULL UNIQUE, + password VARCHAR(80) NOT NULL, + email VARCHAR(120) NOT NULL UNIQUE, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP +); diff --git a/requirements.txt b/requirements.txt index 4732092335231313cda7ddbc2577427ab528ea59..e18447d9fad694d7a43400a455ad7bdf8cea4939 100644 GIT binary patch literal 518 zcmZ{g!Aiqm5QOI}_$W#fwbX+LFCIz@N)H~T#+cUHq%;kv53hc+f75~>KTE>S?Ci|` zd_U`5OVwJb)K)jVOy|0$20GP=iogqSV6P1Aca%5^qTlu+t<%@6|=tIW8_=ui*HBT-rq6BFV0m<3IG5A delta 13 UcmZo;>0z2sGx0~>