From 52b7c9e7f0df2def7885ff8f28c907ac11a9495b Mon Sep 17 00:00:00 2001 From: javamon117 <124219470+javamon117@users.noreply.github.com> Date: Wed, 2 Aug 2023 17:10:20 +0900 Subject: [PATCH] first push --- .idea/.gitignore | 8 + .../inspectionProfiles/profiles_settings.xml | 6 + .idea/misc.xml | 4 + .idea/modules.xml | 8 + .idea/vcs.xml | 6 + .idea/wixon_blog.iml | 19 +++ app.py | 159 ++++++++++++++++++ .../img/d6dffe69d6f84a709962b653e7f6eb16.png | Bin 0 -> 59830 bytes .../img/e0cb20c7b5a34b46b117e06f94963996.png | Bin 0 -> 926 bytes static/upload/img/logo.png | Bin 0 -> 926 bytes templates/base.html | 75 +++++++++ templates/index.html | 32 ++++ templates/login.html | 32 ++++ templates/write.html | 65 +++++++ 14 files changed, 414 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 .idea/wixon_blog.iml create mode 100644 app.py create mode 100644 static/upload/img/d6dffe69d6f84a709962b653e7f6eb16.png create mode 100644 static/upload/img/e0cb20c7b5a34b46b117e06f94963996.png create mode 100644 static/upload/img/logo.png create mode 100644 templates/base.html create mode 100644 templates/index.html create mode 100644 templates/login.html create mode 100644 templates/write.html diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..f86113d --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# 디폴트 무시된 파일 +/shelf/ +/workspace.xml +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# 에디터 기반 HTTP 클라이언트 요청 +/httpRequests/ diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..d56657a --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..1fbe102 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/wixon_blog.iml b/.idea/wixon_blog.iml new file mode 100644 index 0000000..b594273 --- /dev/null +++ b/.idea/wixon_blog.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app.py b/app.py new file mode 100644 index 0000000..3324a31 --- /dev/null +++ b/app.py @@ -0,0 +1,159 @@ +from flask import Flask, render_template, request, redirect, url_for, flash, session +import pymysql +from flask import session, g, jsonify +import bcrypt +from bs4 import BeautifulSoup +from werkzeug.utils import secure_filename +import os +import uuid + +UPLOAD_FOLDER = 'static/upload/img' # 경로를 Flask 앱 루트 기준으로 수정 +ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'} + +app = Flask(__name__) +app.secret_key = 'your secret key' +app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER + + +@app.before_request +def load_user(): + if 'user_info' in session: + g.is_login = True + g.user_info = session['user_info'] + + +def allowed_file(filename): + return '.' in filename and \ + filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS + + +@app.route('/upload_image', methods=['POST']) +def upload_image(): + if 'file' not in request.files: + return jsonify(success=False, message='No file part'), 400 + + file = request.files['file'] + + if file.filename == '': + return jsonify(success=False, message='No selected file'), 400 + + if file and allowed_file(file.filename): + # Secure the filename and keep its extension + filename = secure_filename(file.filename) + ext = filename.rsplit('.', 1)[1].lower() + + # Generate a random filename using uuid4 + random_filename = f'{uuid.uuid4().hex}.{ext}' + + file_path = os.path.join(app.config['UPLOAD_FOLDER'], random_filename) + + # Create directories if not exist + os.makedirs(os.path.dirname(file_path), exist_ok=True) + + file.save(file_path) + + # Generate the URL of the saved image file + file_url = url_for('static', filename='upload/img/' + random_filename) + + return jsonify(success=True, fileUrl=file_url), 200 + + return jsonify(success=False, message='File not allowed'), 400 + + +# MySQL 데이터베이스 연결 설정 +def connnect_db(): + return pymysql.connect( + host='wxnasso.synology.me', + user='wixon5', + password='Wixon2022@!', + database='wixon', + charset="utf8mb4", + cursorclass=pymysql.cursors.DictCursor, # DictCursor를 사용하여 딕셔너리 형태로 결과를 반환 + init_command='SET SQL_SAFE_UPDATES = 0;', + ) + + +def sql_execute(q, d, is_data=False, is_last_id=False): + data = None + last_id = None + with connnect_db().cursor(pymysql.cursors.DictCursor) as cursor: + try: + res = cursor.execute(q, d) + data = cursor.fetchall() if is_data else None + last_id = cursor.lastrowid if cursor.lastrowid != 0 else None + cursor.connection.commit() + except Exception as e: + print(e) + cursor.connection.rollback() + res = False + + return (res, last_id if is_last_id else data) if is_data or is_last_id else res + + +@app.route('/') +def index(): + # MySQL에서 모든 블로그 포스트를 가져옵니다. + query = "SELECT `title`, `thumbnail_img`, `contents` FROM `blog` WHERE `use_yn` = 'Y' ORDER BY `add_date` DESC;" + r, posts = sql_execute(query, (), is_data=True) + + # `index.html` 템플릿으로 데이터를 전달합니다. + return render_template('index.html', posts=posts) + + +@app.route('/login', methods=['GET', 'POST']) +def login(): + if request.method == 'POST': + username = request.form.get('username') + password = request.form.get('password').encode('utf-8') + + # DB에서 사용자 정보 가져오기 + res, user = sql_execute("SELECT * FROM member WHERE mb_id=%s", (username,), is_data=True) + if res and user and bcrypt.checkpw(password, user[0]['mb_passwd'].encode('utf-8')): + session['username'] = username + session['user_info'] = user[0] + return redirect(url_for('index')) + else: + flash('Username or password is incorrect') + return render_template('login.html') + + +@app.route('/logout') +def logout(): + session.clear() + g.is_login = False + g.user_info = None + + return redirect(url_for('index')) + + +@app.route('/write', methods=['GET', 'POST']) +def write(): + if request.method == 'POST': + title = request.form['title'] + category = request.form['category'] + contents = request.form['contents'] + + # 본문에서 첫 번째 이미지 추출 + soup = BeautifulSoup(contents, 'html.parser') + first_image = soup.find('img') + thumbnail_img = first_image['src'] if first_image else None + + # SQL 쿼리와 삽입할 데이터 설정 + query = "INSERT INTO blog (title, category, contents, thumbnail_img, use_yn) VALUES (%s, %s, %s, %s, 'Y')" + data = (title, category, contents, thumbnail_img) + + # 새로운 글 저장 + result, last_id = sql_execute(query, data, is_last_id=True) + + if result: + # 저장 성공시, 인덱스 페이지로 리다이렉트 + return redirect(url_for('index')) + else: + # 저장 실패시, 에러 메시지 반환 + return "Failed to write post", 500 + else: + return render_template('write.html') + + +if __name__ == '__main__': + app.run(host='0.0.0.0', port=8899) diff --git a/static/upload/img/d6dffe69d6f84a709962b653e7f6eb16.png b/static/upload/img/d6dffe69d6f84a709962b653e7f6eb16.png new file mode 100644 index 0000000000000000000000000000000000000000..2e9266a09f01ae5988b0f6855e365bac7be344fe GIT binary patch literal 59830 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 literal 0 HcmV?d00001 diff --git a/static/upload/img/logo.png b/static/upload/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e73dfe2a22e4fa050b7c41f3b5c7bab8708ffbd4 GIT binary patch literal 926 zcmeAS@N?(olHy`uVBq!ia0vp^u0U+U!3-o{>$27ZsgnUdA+GB#oc#OmA4_h8PD_z= zRl0C#(zjnffB*e+?B303hjw=E+Q^m{dHdD#sQD8eCp5nP{AuBd17=;77oR-f%#Y?P ziu?5Ao8OGiUDq!v)n(UjS-JcACFQ!DkKeytdh)Pn?Lyz_9j2X?Y0G9le*gB#`?pRL z8@qOIOkFx7dj6!vClA$aURk_$;i8iVS#u+}3S!=V{mh;h#a|pBw{Xgx*DplMk{Y+I z&RjlQvNE-F-Qs|mT~iM3;K+~q@%vZgya^BAy`Fk-=d+LRV;4+j&I$kj|NjpCpjSXo zIhO?a1p~Ph0tUw-9K}8w^_nwhP^!Zm~Lrd-vK2!QS^J{ogbkiJZG5 z&Hl+1rs@hqYi6$Bvt}N>CzqUUcrG(ACH~NclS^X*ZiG+2BbT_PY))x#@*3akFAChe zjSd`(NM2(Y$1ilwEsmvU>(i7MO)=Lk)|PIXqgl(YquV;+{|m0KQ{*8tkw}fxp8-I>p?EA*ux1RavY-s*Fwb^LjPOpav zth=obSZwIIb0AXEKH8%AmEiLOOzuzAocH}XC;yp4!nk|>hF&H6Tm8I7Pp8auJ@an9 zwc_T5XD%socYacjtg}7G>g`j;?W!wyQ#Ntsxpx}f=U*3}tKU2&^}D^!(SmnwE>_z` zHs98msT;|4v-kcqqv$O^_T>5QoVCTW_ToO)0=C?yAK(~z6k#msCMj; z`Q7%KHC-EjFznE?PXB-KlKSV)=WmJ+T@;h=xpmR}SdvlqoSRq0{y)x23y)rAxh}OV dZa)(bgNc=?^f9|%^MGlS!PC{xWt~$(696f+^lJbB literal 0 HcmV?d00001 diff --git a/templates/base.html b/templates/base.html new file mode 100644 index 0000000..c3f236c --- /dev/null +++ b/templates/base.html @@ -0,0 +1,75 @@ + + + + Blog + + + + + + + + + + + + + + + + + + +{% block content %}{% endblock %} + + + + + diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..f35ec87 --- /dev/null +++ b/templates/index.html @@ -0,0 +1,32 @@ +{% extends 'base.html' %} + +{% block content %} +
+
+ {% for post in posts %} +
+
+ {{ post.title }} +
+
+

{{ post.title }}

+ +

{{ post.contents | striptags | truncate(100) }}

+ Read more +
+
+ {% endfor %} +
+
+ + +{% endblock %} diff --git a/templates/login.html b/templates/login.html new file mode 100644 index 0000000..7fe4b45 --- /dev/null +++ b/templates/login.html @@ -0,0 +1,32 @@ +{% extends 'base.html' %} + +{% block content %} +
+

윅슨 블로그 로그인

+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ + {{ messages[0] }} +
+ {% endif %} + {% endwith %} +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+
+{% endblock %} diff --git a/templates/write.html b/templates/write.html new file mode 100644 index 0000000..327cfa2 --- /dev/null +++ b/templates/write.html @@ -0,0 +1,65 @@ +{% extends 'base.html' %} + +{% block content %} +
+

포스트 작성

+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+
+ + +{% endblock %}