diff --git a/app.py b/app.py index 77ccb28..456ac1d 100644 --- a/app.py +++ b/app.py @@ -1,7 +1,7 @@ from pymongo import MongoClient from flask import Flask, render_template, request, jsonify, redirect, url_for, session import hashlib -import datetime +import datetime import jwt import time from pytz import timezone @@ -29,10 +29,10 @@ def home(): return render_template('index.html', isLogin=True, nickname=user_info["nick"]) except jwt.ExpiredSignatureError: session.pop('Authorization', None) - return render_template('index.html', isLogin=False, alert="로그인 시간이 만료되었습니다. 다시 로그인 해주세요.") + return redirect(url_for("redirectPage", alert="로그인 시간이 만료되었습니다. 다시 로그인 해주세요.")) except jwt.exceptions.DecodeError: session.pop('Authorization', None) - return render_template('index.html', isLogin=False, alert="로그인 정보가 존재하지 않아 로그아웃 되었습니다.") + return redirect(url_for("redirectPage", alert="로그인 정보가 존재하지 않아 로그아웃 되었습니다.")) else: return render_template('index.html') @@ -40,32 +40,14 @@ def home(): @app.route('/join') def join(): if 'Authorization' in session: - token_receive = session['Authorization'] - try: - payload = jwt.decode(token_receive, SECRET_KEY, - algorithms=['HS256']) - user_info = db.user.find_one({"id": payload['id']}) - return redirect(url_for("home", alert="이미 로그인 된 상태라 홈으로 이동합니다.", isLogin=True, nickname=user_info["nick"])) - except jwt.ExpiredSignatureError: - session.pop('Authorization', None) - except jwt.exceptions.DecodeError: - session.pop('Authorization', None) + return redirect(url_for("home")) return render_template('join.html') @app.route('/login') def login(): if 'Authorization' in session: - token_receive = session['Authorization'] - try: - payload = jwt.decode(token_receive, SECRET_KEY, - algorithms=['HS256']) - user_info = db.user.find_one({"id": payload['id']}) - return redirect(url_for("home", alert="이미 로그인 된 상태라 홈으로 이동합니다.", isLogin=True, nickname=user_info["nick"])) - except jwt.ExpiredSignatureError: - session.pop('Authorization', None) - except jwt.exceptions.DecodeError: - session.pop('Authorization', None) + return redirect(url_for("home")) return render_template('login.html') @@ -157,6 +139,23 @@ def read_article(id): rs.append(item2) return jsonify({'code':1, 'data':rs}) +@app.route('/api/ask/list', methods=['GET']) +def show_articles(): + filter = {} + project = {} + rs = list() + docs = list(db.memos.find(filter, project).sort('date', -1)) + # docs = list(db.memos.find().sort({'date', -1})) + # 시간으로 리스트 정리하기 + for memo in docs: + item = { + 'title':memo['title'], + 'content':memo['content'], + 'nickname':memo['nickname'], + 'date':datetime.datetime.fromtimestamp(memo['date']) + } + rs.append(item) + return jsonify({'code': 1, 'data': rs}) # def emptyString(id): # filter = {'_id': bson.ObjectId(id)} # content = "ChatGPT 답변중..." @@ -169,5 +168,68 @@ def read_article(id): # t1 = threading.Thread(target=self.emptyString()) # t1.start + + + +@app.route('/api/ask/create', methods=['POST']) +def post_article(): + title = request.form['title'] + nickname = request.form['nickname'] + now = int(time.time()) + memo = {'title': title, 'content': "", 'nickname': nickname, 'date': now} + result = db.memos.insert_one(memo) + memo['_id'] = str(result.inserted_id) + chatgpt_comment(memo['_id'], title) + return jsonify({'code': 1, 'data': memo}) + + +@app.route('/api//comment/create', methods=['POST']) +def post_comment(id): + comment = request.form['comment'] + now = int(time.time()) + nickname = request.form['nickname'] + memo = {'postid': id, 'comment': comment, + 'nickname': nickname, 'date': now} + db.comment.insert_one(memo) + return jsonify({'code': 1}) + # memo['_id'] = str(result.inserted_id) + + +@app.route('/api/ask//comment/list', methods=['GET']) +def show_comment(id): + filter = {'postid': id} + project = {} + rs = list() + # docs = list(db.memos.find ().sort( { 'date' : 1 } )) + docs = list(db.comment.find(filter, project).sort('date', 1)) + for memo in docs: + item = { + 'nickname': memo['nickname'], + 'comment': memo['comment'], + # '_id': str(memo['_id']), + 'date': datetime.datetime.fromtimestamp(memo['date']) + } + rs.append(item) + return jsonify({'code': 1, 'data': rs}) + + +def chatgpt_comment(id, title): + # user_content = request.form['title'] + messages = [] + messages.append({"role": "user", "content": title}) + completion = openai.ChatCompletion.create( + model="gpt-3.5-turbo", messages=messages) + chatgpt_reply = completion.choices[0].message["content"].strip() + db.memos.update_one({'_id': bson.ObjectId(id)}, { + "$set": {"content": chatgpt_reply}}) + + +@app.route('/redirect') +def redirectPage(): + alert = request.args.get('alert') + session.pop('Authorization', None) + return render_template('redirect.html', alert=alert) + + if __name__ == '__main__': app.run('0.0.0.0', port=5000, debug=True) diff --git a/templates/base.html b/templates/base.html index aa24a02..be60b99 100644 --- a/templates/base.html +++ b/templates/base.html @@ -7,11 +7,6 @@ {% block title %}{% endblock %} - 정글Wiki {% endblock %} - {% block script %} {% endblock %} diff --git a/templates/detail.html b/templates/detail.html index fef32ba..005cfdf 100644 --- a/templates/detail.html +++ b/templates/detail.html @@ -27,7 +27,7 @@ {% if isLogin == True %}
-