해결된 질문
작성
·
151
1
이전 질문글에서 jinja2 에러가 주석처리되있지만 {% %} 라는 부분이 있어서 에러가 뜬거일수 있다는 답변에 그 부분 지웠더니 바로 다른 에러가 떴습니다.
run.py와 write.html, view.html 모든 부분 다 올립니다.
주석처리되있던 한글로 쓴 설명도 다 지웠습니다.
run.py
# -*- coding: utf-8 -*-
from flask import Flask
from flask import request
from flask import render_template
from flask_pymongo import PyMongo
from datetime import datetime
from bson.objectid import ObjectId
from flask import abort
import time
app = Flask(__name__)
app.config["MONGO_URI"] = "mongodb://localhost:27017/myweb"
mongo = PyMongo(app)
@app.template_filter("formatdatetime")
def format_datetime(value):
if value is None:
return ""
now_timestamp = time.time()
offset = datetime.fromtimestamp(
now_timestamp) - datetime.utcfromtimestamp(now_timestamp)
value = datetime.fromtimestamp((int(value) / 1000) + offset)
return value.strftime('%Y-%m-%d %H:%M:%S')
@app.route("/view")
def board_view():
idx = request.args.get("idx")
if idx is not None:
board = mongo.db.board
data = board.find_one({"_id": ObjectId(idx)})
if data is not None:
result = {
"id": data.get("_id"),
"name": data.get("name"),
"title": data.get("title"),
"contents": data.get("contents"),
"pubdate": data.get("pubdate"),
"view": data.get("view")
}
return render_template("view.html", result=result)
return abort(400)
@app.route("/write", methods=["POST", "GET"])
def board_write():
if request.method == "POST":
name = request.form.get("name")
title = request.form.get("title")
contents = request.form.get("contents")
print(name, title, contents)
current_utc_time = round(datetime.utcnow().timestamp() * 1000)
board = mongo.db.board
post = {
"name": name,
"title": title,
"contents": contents,
"pubdate": current_utc_time,
"view": 0,
}
x = board.insert_one(post)
print(x.inserted_id)
return str(x.inserted_id)
else:
return render_template("write.html")
if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True, port=9000)
write.html
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>write</title>
</head>
<body>
<table>
<form name="form" method="POST" action="/write">
<tr>
<td>작성자</td>
<td><input type="text" name="name" /></td>
</tr>
<tr>
<td>제목</td>
<td><input type="text" name="title" /></td>
</tr>
<tr>
<td>내용</td>
<td><textarea name="contents"></textarea></td>
</tr>
<tr>
<td colspan="2"><input type="submit" /></td>
</tr>
</form>
</table>
</body>
</html>
view.html
<html>
{{result.title}}
<br />
{{result.name}}
<br />
{{result.pubdate|formatdatetime}}
<br />
{{result.view}}
<br />
{{result.contents}}
</html>
답변 2
1
위의 코드에서 오류가 발생하는 부분은 추측컨데
value = datetime.fromtimestamp((int(value) / 1000) + offset)
이 코드를 잘못 쓰신것 같습니다. 항상 개발자는 대소문자, 오타, 연산자 우선순위를 주의해야 하고 이런 아주 기본적인 실수로 인해 엄청난 시간을 잡아먹기도 합니다. 위의 코드에서 괄호의 위치가 강좌의 내용과 다릅니다. 이 부분을 확인해보시기 바랍니다.
PS> 질문을 주실때 어떤 오류가 나는지, 해당 오류가 가르키는 코드를 알려주셔야 제가 코드와 오류를 보고 답을 드릴 수 있습니다.
0