Skip to content

Commit 9cd6ed8

Browse files
committed
fix routing
1 parent c12755e commit 9cd6ed8

File tree

4 files changed

+63
-65
lines changed

4 files changed

+63
-65
lines changed

page_analyzer/app.py

Lines changed: 60 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -11,78 +11,76 @@
1111
DATABASE_URL = os.getenv('DATABASE_URL')
1212

1313
app = Flask(__name__)
14-
app.secret_key = 'SECRETFORMYPROJECT007'
14+
app.secret_key = os.getenv('SECRET_KEY')
1515

1616

1717
def get_db_connection():
1818
conn = psycopg2.connect(DATABASE_URL)
1919
return conn
2020

2121

22-
@app.route('/', methods=['GET', 'POST'])
22+
@app.route('/', methods=['GET'])
2323
def index():
24-
if request.method == 'POST':
25-
url_input = request.form.get('url')
26-
# Проверка валидности
27-
if not validators.url(url_input) or len(url_input) > 255:
28-
# Редирект на /urls с этим же URL
29-
return redirect(url_for('urls', url=url_input))
30-
else:
31-
return redirect(url_for('urls', url=url_input))
3224
return render_template('index.html')
3325

34-
@app.route('/urls', methods=['GET', 'POST'])
35-
def urls():
36-
if request.method == 'POST':
37-
url = request.form['url']
38-
return redirect(url_for('urls', url=url))
39-
else:
40-
url = request.args.get('url')
41-
if url:
42-
if not validators.url(url) or len(url) > 255:
43-
flash('Некорректный URL', 'error')
44-
return render_template('index.html'), 422 # Возвращаем ошибку 422 с HTML
45-
46-
domain = urlparse(url).netloc
47-
48-
with get_db_connection() as conn:
49-
with conn.cursor() as cur:
50-
try:
51-
cur.execute('SELECT id FROM urls WHERE name = %s', (domain,))
52-
existing_url = cur.fetchone()
53-
54-
if existing_url:
55-
url_id = existing_url[0]
56-
flash('Страница уже существует', 'error')
57-
return redirect(url_for('url_detail', url_id=url_id))
58-
59-
cur.execute('INSERT INTO urls (name) VALUES (%s) RETURNING id', (domain,))
60-
url_id = cur.fetchone()[0]
61-
conn.commit()
62-
flash('Страница успешно добавлена', 'success')
63-
64-
return redirect(url_for('url_detail', url_id=url_id))
65-
except Exception as e:
66-
conn.rollback()
67-
flash(f'Произошла ошибка: {str(e)}', 'error')
68-
69-
# Если URL не передан, или если запрос POST без URL, получаем все URL из БД
70-
with get_db_connection() as conn:
71-
with conn.cursor() as cur:
72-
cur.execute('''
73-
SELECT u.id, u.name, u.created_at,
74-
uc.status_code, uc.created_at AS last_check,
75-
uc.h1, uc.title, uc.description
76-
FROM urls u
77-
LEFT JOIN url_checks uc ON u.id = uc.url_id
78-
AND uc.created_at = (
79-
SELECT MAX(created_at)
80-
FROM url_checks
81-
WHERE url_id = u.id
82-
)
83-
''')
84-
urls = cur.fetchall()
85-
return render_template('urls.html', urls=urls)
26+
27+
@app.route('/urls', methods=['POST'])
28+
def create_url():
29+
url_input = request.form.get('url')
30+
error_message = None
31+
32+
# Валидация URL
33+
if not url_input or len(url_input) > 255:
34+
error_message = "Некорректный URL или превышена длина 255 символов."
35+
elif not validators.url(url_input):
36+
error_message = "Некорректный URL."
37+
38+
if error_message:
39+
flash(error_message, 'error')
40+
return render_template('index.html', url=url_input), 422 # Возвращаем ошибку 422 с HTML
41+
42+
# Нормализация URL
43+
normalized_url = url_input.strip()
44+
45+
# Проверка на наличие URL в базе данных
46+
with get_db_connection() as conn:
47+
with conn.cursor() as cur:
48+
cur.execute('SELECT id FROM urls WHERE name = %s', (normalized_url,))
49+
existing_url = cur.fetchone()
50+
51+
if existing_url:
52+
url_id = existing_url[0]
53+
flash('Страница уже существует', 'error')
54+
return redirect(url_for('url_detail', url_id=url_id))
55+
56+
# Сохранение нового URL в базу данных
57+
cur.execute('INSERT INTO urls (name) VALUES (%s) RETURNING id', (normalized_url,))
58+
url_id = cur.fetchone()[0]
59+
conn.commit()
60+
flash('Страница успешно добавлена', 'success')
61+
62+
return redirect(url_for('url_detail', url_id=url_id))
63+
64+
65+
@app.route('/urls', methods=['GET'])
66+
def list_urls():
67+
with get_db_connection() as conn:
68+
with conn.cursor() as cur:
69+
cur.execute('''
70+
SELECT u.id, u.name, u.created_at,
71+
uc.status_code, uc.created_at AS last_check,
72+
uc.h1, uc.title, uc.description
73+
FROM urls u
74+
LEFT JOIN url_checks uc ON u.id = uc.url_id
75+
AND uc.created_at = (
76+
SELECT MAX(created_at)
77+
FROM url_checks
78+
WHERE url_id = u.id
79+
)
80+
''')
81+
urls = cur.fetchall()
82+
return render_template('urls.html', urls=urls)
83+
8684

8785

8886

page_analyzer/templates/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<div class="col-12 col-md-11 col-lg-8 mx-auto border rounded-3 bg-light p-5">
2020
<h1 class="display-3">Анализатор страниц</h1>
2121
<p class="lead">Бесплатно проверяйте сайты на SEO-пригодность</p>
22-
<form method="POST">
22+
<form method="POST" action="{{ url_for('create_url') }}">
2323
<div class="input-group input-group-lg">
2424
<input
2525
type="url"

page_analyzer/templates/layout.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
<div class="collapse navbar-collapse" id="navbarNav">
1818
<ul class="navbar-nav">
1919
<li class="nav-item">
20-
<a class="nav-link active" aria-current="page" href="{{ url_for('urls') }}">Сайты</a>
20+
<a class="nav-link active" aria-current="page" href="{{ url_for('list_urls') }}">Сайты</a>
2121
</li>
2222
</ul>
2323
</div>

page_analyzer/templates/result.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ <h2>Проверки:</h2>
5050
</tbody>
5151
</table>
5252

53-
<a href="{{ url_for('urls') }}" class="btn btn-secondary">Назад к списку</a>
53+
<a href="{{ url_for('list_urls') }}" class="btn btn-secondary">Назад к списку</a>
5454
</div>
5555
</body>
5656
</html>

0 commit comments

Comments
 (0)