-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.py
106 lines (80 loc) · 3.2 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# Импортируем фреймворк Flask и его функции
from flask import Flask, render_template, jsonify, request
# Импортируем logger
import logger
# Импортируем функции из utils.py, которые будем использовать
from utils import *
# Импортируем конфигурацию из файла config.py
from config import Config
from db import db
# Создаём логгер для дальнейшей работы с ним
log = logger.get_logger("api")
def create_app(config) -> Flask:
app = Flask(__name__)
app.config.from_object(config)
db.init_app(app)
return app
app: Flask = create_app(Config)
@app.route("/")
def page_main():
"""Главная страница со всеми постами"""
posts = get_posts_all()
return render_template("index.html", posts=posts)
@app.route("/posts/<int:pk>")
def page_post(pk):
"""Страница с постом по его идентификатору"""
post = get_post_by_pk(pk)
comments = get_comments_by_post_id(pk)
return render_template("post.html", post=post, comments=comments)
@app.route("/search/")
def page_search_post():
"""" Страница с выводом постов по ключевому слову"""
word = request.args.get("s", "").lower()
posts = search_for_posts(query=word)
return render_template("search.html", posts=posts)
@app.route("/users/<user_name>")
def page_post_by_user_name(user_name):
"""Страница с выводом постов по пользователю"""
posts = get_posts_by_user(user_name=user_name)
return render_template("user-feed.html", posts=posts)
@app.route("/api/posts/")
def api_main():
"""
Представление, которое обрабатывает запрос GET /api/posts
и возвращает полный список постов в виде JSON-списка
"""
posts = get_posts_all()
log.info(f"api_main - > {len(posts)}")
return jsonify(posts)
@app.route("/api/posts/<int:pk>")
def api_post(pk):
"""
Представление, которое обрабатывает запрос GET /api/posts/<post_id>
и возвращает один пост в виде JSON-словаря
"""
post = get_post_by_pk(pk)
log.info(f"api_post - > {pk}")
return jsonify(post)
@app.errorhandler(404)
def page_not_found(e):
"""
Обработчик запросов при обращении к несуществующим
страницам
"""
return "Извините, но страница не найдена. Ошибка - 404"
@app.errorhandler(500)
def page_not_found(e):
"""
Обработчик ошибок, возникающих на стороне сервера
"""
return "Приносим наши извинения, произошла внутренняя ошибка сервера. Ошибка - 500"
@app.route("/test_db", methods=["GET"])
def db_page():
result = db.session.execute(
'''
SELECT 1;
'''
).scalar()
return jsonify({'result': result})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=25000)