From 06cc7c57080ce0f62da9cbe3a97c905449086ba5 Mon Sep 17 00:00:00 2001 From: Nyemba Ambela Jean Nicolas Date: Fri, 30 May 2025 22:15:21 +0100 Subject: [PATCH] =?UTF-8?q?Ajout=20de=20la=20base=20de=20donn=C3=A9es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Rapport.docx | Bin 25189 -> 32415 bytes blog-app/blogapp.py | 40 +++++++++++++++++++++++++++++++--- blog-app/instance/blogsite.db | Bin 0 -> 20480 bytes blog-app/requirements.txt | Bin 596 -> 774 bytes 4 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 blog-app/instance/blogsite.db diff --git a/Rapport.docx b/Rapport.docx index 652bd4bd262dfd53b24c406a9077a077a7cc2933..6004db9ab672328c154a0406c711911e94f56d1d 100644 GIT binary patch delta 21900 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 delta 14622 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 aB`6RO(*K(Oo3UsmxcZPl$msrO_5T2Lu9&O< diff --git a/blog-app/blogapp.py b/blog-app/blogapp.py index f05de36..faaf81e 100644 --- a/blog-app/blogapp.py +++ b/blog-app/blogapp.py @@ -1,9 +1,42 @@ + + +from datetime import datetime from flask import Flask, render_template, url_for, flash, redirect +from flask_sqlalchemy import SQLAlchemy # type: ignore from forms import RegistrationForm, LoginForm - app = Flask(__name__) app.config['SECRET_KEY'] = 'db3746b2ffa650b3804e4316d227f853' +app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///blogsite.db' + +db = SQLAlchemy(app) + + +class User(db.Model): + id = db.Column(db.Integer, primary_key=True) + username = db.Column(db.String(20), unique=True, nullable=False) + email = db.Column(db.String(120), unique=True, nullable=False) + image_file = db.Column(db.String(20), nullable=False, + default='default.jpg') + password = db.Column(db.String(60), nullable=False) + posts = db.relationship('Post', backref='author', lazy=True) + + def __repr__(self): + return f"User('{self.username}', '{self.image_file}')" + + +class Post(db.Model): + id = db.Column(db.Integer, primary_key=True) + title = db.Column(db.String(100), nullable=False) + date_posted = db.Column(db.DateTime, nullable=False, + default=datetime.utcnow) + content = db.Column(db.Text, nullable=False) + user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) + + + def __repr__(self): + return f"Post('{self.title}', '{self.date_posted}')" + posts = [ { @@ -12,7 +45,7 @@ posts = [ ] navbaritems = [ - + { 'name': 'home', 'url': 'home' @@ -38,6 +71,7 @@ def home(): def about(): return render_template('about.html', title='About', posts=posts, navbaritems=navbaritems) + @app.route("/register", methods=['GET', 'POST']) def register(): form = RegistrationForm() @@ -60,4 +94,4 @@ def login(): if __name__ == '__main__': - app.run(debug=True, port=8700) + app.run(debug=True, host='0.0.0.0', port=8700) diff --git a/blog-app/instance/blogsite.db b/blog-app/instance/blogsite.db new file mode 100644 index 0000000000000000000000000000000000000000..31bc1ac0958a3e9aecc1c0aad601e7644dfb9b4a GIT binary patch literal 20480 zcmeI(K~LK-6bEpp6gnbx&t!$M08PA~k2Hoy=&u%1495&~vdN97nt&5<=8$UA1*m z)@-Lbxv-zkRDV&oCbrLy>y4kHTE7!dzcqd|zS|B81Rwwb2tWV=5P$##AOHaf{9WL7 zT&-<3o6gs+N#6JMbzT^*t8FFyNK)kQcO>x$wcPbAr67#tkyI3(L=^TqooD2(o6Phz zz4KN3wXa&cJ3HRYbeb3)^Ab9x1G{JxbmdIIhkR)C&`=~V?4nZ(j|)AD7u@u%3c9|! zq&M=CT3PDxMh;Ju430t`YyJMNM@k+_CBwEnBOWV*UGMgbbDwuy=FKx)D>HfD$1lvA zr-#YlA@#kv%=IA2`VTPk)7c>TsN<__3U5B-Iw^`z`6&If$cwpKJjT!qgVUa*l7RPD z+Drz^J$bITwX(MPvgwFynCj2PP2WDU$H~~_<#o)d#e3XVw<`Y(+~vR(d(fWnVXJeq z!3_!oAOHafKmY;|fB*y_009U<00PS@;BsPk{$JLg7kNPd0uX=z1Rwwb2tWV=5P$## zN&!6o;~+o)0uX=z1Rwwb2tWV=5P$##mS14%|Ns1MKff1HS^lh%Ap{@*0SG_<0uX=z O1Rwwb2teTf68Hsd^s>+Z literal 0 HcmV?d00001 diff --git a/blog-app/requirements.txt b/blog-app/requirements.txt index f9242918f8dbb6da5f84ab2abae899bd1c30f362..3adfbe9ff48e02e36ff7a9c090ab8c43b3c22acc 100644 GIT binary patch delta 151 zcmcb@(#Ezyfl)Y^A&|j`!I2?{A(i@Kqq%50LlKad%8&