From e3a4c716d41e42f44b19807e28b225bf50c63af5 Mon Sep 17 00:00:00 2001 From: hornet Date: Fri, 11 Oct 2024 00:55:09 +0500 Subject: [PATCH] implement login, registration and posting --- app.py | 68 ++++++++++++++++++++++++++++++++++++----- mongo.py | 11 ------- static/css/styles.css | 37 +++++++++++++++++++++- templates/board.html | 4 +-- templates/index.html | 7 ++++- templates/login.html | 19 ++++++++++++ templates/register.html | 21 +++++++++++++ 7 files changed, 145 insertions(+), 22 deletions(-) delete mode 100644 mongo.py create mode 100644 templates/login.html create mode 100644 templates/register.html diff --git a/app.py b/app.py index 801322e..c1ef492 100644 --- a/app.py +++ b/app.py @@ -1,14 +1,17 @@ -from flask import Flask, url_for, redirect, render_template, request +from flask import Flask, url_for, redirect, render_template, request, session, Response from pymongo import MongoClient from datetime import datetime from bson.objectid import ObjectId +from werkzeug.security import generate_password_hash, check_password_hash app = Flask(__name__) +app.secret_key = 'secret_key' #initialize the database client = MongoClient('localhost', 27017) db = client.flask_db posts_collection = db.posts_collection +users_collection = db.users_collection #app routes @@ -29,10 +32,10 @@ def board(board_name): {'name': 's', 'display_name': '/s/ - soyjaks'}, {'name': 'pol', 'display_name': '/pol/ - politically incorrect'} ] - #global posts - #posts = posts_collection.find({'board_name': board_name}).sort('timestamp', -1) + + posts = posts_collection.find({'board_name': board_name}).sort('timestamp', -1) display_name = next((link['display_name'] for link in links if link['name'] == board_name), board_name) - return render_template('board.html', title=board_name, header=display_name, links=links) + return render_template('board.html', title=board_name, header=display_name, links=links, posts=posts) @app.route('/post', methods=['POST']) def post(): @@ -42,15 +45,66 @@ def post(): timestamp = datetime.now() #insert the post into MongoDB - posts.insert_one({ + post_data = { 'board_name': board_name, 'content': content, - 'image': image.read(), 'timestamp': timestamp - }) + } + + if image: + post_data['image'] = image.read() + + posts_collection.insert_one(post_data) return redirect(url_for('board', board_name=board_name)) +@app.route('/image/') +def image(post_id): + post = posts_collection.find_one({'_id': ObjectId(post_id)}) + if post and 'image' in post: + return Response(post['image'], mimetype='image/jpeg') + else: + return 'Image not found', 404 + +@app.route('/login', methods=['GET']) +def login(): + return render_template('login.html') + +@app.route('/login', methods=['POST']) +def login_post(): + username = request.form['username'] + password = request.form['password'] + + user = users_collection.find_one({'username': username}) + if user and check_password_hash(user['password'], password): + session['user_id'] = str(user['_id']) + return redirect(url_for('index')) + else: + return redirect(url_for('login')) + +@app.route('/register', methods=['GET']) +def register(): + return render_template('register.html') + +@app.route('/register', methods=['POST']) +def register_post(): + username = request.form['username'] + password = request.form['password'] + hashed_password = generate_password_hash(password, method='pbkdf2:sha256') + + #insert the user into MongoDB + users_collection.insert_one({ + 'username': username, + 'password': hashed_password + }) + + return redirect(url_for('login')) + +@app.route('/logout') +def logout(): + session.pop('user_id', None) + return redirect(url_for('index')) + if __name__ == '__main__': app.run(debug=True) \ No newline at end of file diff --git a/mongo.py b/mongo.py deleted file mode 100644 index d0642e5..0000000 --- a/mongo.py +++ /dev/null @@ -1,11 +0,0 @@ -from flask import Flask, url_for, redirect, render_template, request -from pymongo import MongoClient -from datetime import datetime -from bson.objectid import ObjectId - -app = Flask(__name__) - -#initialize the database -client = MongoClient('localhost', 27017) -db = client.flask_db -posts = db.posts diff --git a/static/css/styles.css b/static/css/styles.css index 404c233..ac91a87 100644 --- a/static/css/styles.css +++ b/static/css/styles.css @@ -44,10 +44,21 @@ button:hover { } input, textarea { - background-color: black; + text-align: center; + width: 10vw; + height: auto; + font-size: 1.5vw; + background-color: rgb(42, 42, 42); color: #00FF00; border: 1px solid #00FF00; padding: 5px; + margin: 2vw; +} + +label, button { + text-align: center; + font-size: 1.5vw; + color: #00FF00; } input::placeholder, textarea::placeholder { @@ -63,3 +74,27 @@ h4 { font-size: 2vw; color: #00FF00; } + +img { + width: 20vw; + height: auto; + margin: 2vw; +} + +.post { + display: flex; + flex-direction: row; + justify-content: flex-start; + text-align: left; + height: 50% auto; + width: 50% auto; + background-color: rgb(42, 42, 42); + border: 1px solid #00FF00; + padding: 10px; + margin: 2vw; +} + +.post:hover { + background-color: #00FF00; + color: black; +} \ No newline at end of file diff --git a/templates/board.html b/templates/board.html index 5ae0cfb..15a40b8 100644 --- a/templates/board.html +++ b/templates/board.html @@ -11,7 +11,7 @@ + diff --git a/templates/login.html b/templates/login.html new file mode 100644 index 0000000..49e5dec --- /dev/null +++ b/templates/login.html @@ -0,0 +1,19 @@ + + + + login + + + +

login

+ + + +
+ + +
+ + + + \ No newline at end of file diff --git a/templates/register.html b/templates/register.html new file mode 100644 index 0000000..3d2a72d --- /dev/null +++ b/templates/register.html @@ -0,0 +1,21 @@ + + + + register + + + + + + \ No newline at end of file