Skip to content

Commit c770c8c

Browse files
committed
fix answer url
1 parent 23fcc48 commit c770c8c

File tree

1 file changed

+89
-70
lines changed

1 file changed

+89
-70
lines changed

page_analyzer/app.py

Lines changed: 89 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -23,85 +23,104 @@ def get_db_connection():
2323
def index():
2424
if request.method == 'POST':
2525
url = request.form['url']
26-
if not validators.url(url) or len(url) > 255:
27-
flash('Некорректный URL', 'error')
28-
return redirect(url_for('index'))
29-
30-
# Извлекаем домен из URL
31-
domain = urlparse(url).netloc
32-
33-
conn = get_db_connection()
34-
cur = conn.cursor()
35-
try:
36-
# Проверяем, существует ли уже этот домен
37-
cur.execute('SELECT id FROM urls WHERE name = %s', (domain,))
38-
existing_url = cur.fetchone()
39-
40-
if existing_url:
41-
# Если домен уже существует, перенаправляем на его детали
42-
url_id = existing_url[0]
43-
flash('Страница уже существует', 'error')
44-
return redirect(url_for('url_detail', url_id=url_id))
45-
46-
# Если домен не существует, добавляем его
47-
cur.execute('INSERT INTO urls (name) VALUES (%s) RETURNING id', (domain,))
48-
url_id = cur.fetchone()[0]
49-
conn.commit()
50-
flash('Страница успешно добавлена', 'success')
51-
52-
return redirect(url_for('url_detail', url_id=url_id))
53-
except Exception as e:
54-
conn.rollback()
55-
flash(f'Произошла ошибка: {str(e)}', 'error')
56-
finally:
57-
cur.close()
58-
conn.close()
59-
26+
return redirect(url_for('urls', url=url))
6027
return render_template('index.html')
6128

62-
63-
@app.route('/urls', methods=['GET'])
29+
@app.route('/urls', methods=['GET', 'POST'])
6430
def urls():
65-
conn = get_db_connection()
66-
cur = conn.cursor()
31+
if request.method == 'POST':
32+
url = request.form['url']
33+
if not validators.url(url) or len(url) > 255:
34+
flash('Некорректный URL', 'error')
35+
return render_template('index.html'), 422 # Возвращаем ошибку 422 с HTML
6736

68-
# Объединяем запросы для получения всех URL и последней проверки
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-
ORDER BY u.created_at DESC
81-
''')
82-
urls = cur.fetchall()
83-
84-
cur.close()
85-
conn.close()
37+
domain = urlparse(url).netloc
8638

87-
return render_template('urls.html', urls=urls)
39+
with get_db_connection() as conn:
40+
with conn.cursor() as cur:
41+
try:
42+
cur.execute('SELECT id FROM urls WHERE name = %s', (domain,))
43+
existing_url = cur.fetchone()
44+
45+
if existing_url:
46+
url_id = existing_url[0]
47+
flash('Страница уже существует', 'error')
48+
return redirect(url_for('url_detail', url_id=url_id))
49+
50+
cur.execute('INSERT INTO urls (name) VALUES (%s) RETURNING id', (domain,))
51+
url_id = cur.fetchone()[0]
52+
conn.commit()
53+
flash('Страница успешно добавлена', 'success')
54+
55+
return redirect(url_for('url_detail', url_id=url_id))
56+
except Exception as e:
57+
conn.rollback()
58+
flash(f'Произошла ошибка: {str(e)}', 'error')
59+
60+
else:
61+
url = request.args.get('url')
62+
if url:
63+
if not validators.url(url) or len(url) > 255:
64+
flash('Некорректный URL', 'error')
65+
return render_template('index.html'), 422 # Возвращаем ошибку 422 с HTML
66+
67+
domain = urlparse(url).netloc
68+
69+
with get_db_connection() as conn:
70+
with conn.cursor() as cur:
71+
try:
72+
cur.execute('SELECT id FROM urls WHERE name = %s', (domain,))
73+
existing_url = cur.fetchone()
74+
75+
if existing_url:
76+
url_id = existing_url[0]
77+
flash('Страница уже существует', 'error')
78+
return redirect(url_for('url_detail', url_id=url_id))
79+
80+
cur.execute('INSERT INTO urls (name) VALUES (%s) RETURNING id', (domain,))
81+
url_id = cur.fetchone()[0]
82+
conn.commit()
83+
flash('Страница успешно добавлена', 'success')
84+
85+
return redirect(url_for('url_detail', url_id=url_id))
86+
except Exception as e:
87+
conn.rollback()
88+
flash(f'Произошла ошибка: {str(e)}', 'error')
89+
90+
with get_db_connection() as conn:
91+
with conn.cursor() as cur:
92+
cur.execute('''
93+
SELECT u.id, u.name, u.created_at,
94+
uc.status_code, uc.created_at AS last_check,
95+
uc.h1, uc.title, uc.description
96+
FROM urls u
97+
LEFT JOIN url_checks uc ON u.id = uc.url_id
98+
AND uc.created_at = (
99+
SELECT MAX(created_at)
100+
FROM url_checks
101+
WHERE url_id = u.id
102+
)
103+
''')
104+
urls = cur.fetchall()
105+
return render_template('urls.html', urls=urls)
88106

89107

90108
@app.route('/urls/<int:url_id>', methods=['GET'])
91109
def url_detail(url_id):
92110
conn = get_db_connection()
93111
cursor = conn.cursor()
94112
cursor.execute('SELECT * FROM urls WHERE id = %s', (url_id,))
95-
url = cursor.fetchone()
96-
cursor.execute('SELECT * FROM url_checks WHERE url_id = %s', (url_id,))
113+
url_record = cursor.fetchone()
114+
cursor.execute('SELECT * FROM url_checks WHERE url_id = %s ORDER BY created_at DESC', (url_id,))
97115
checks = cursor.fetchall()
98116
cursor.close()
99117
conn.close()
100-
if url is None:
118+
119+
if url_record is None:
101120
flash('Сайт не найден.', 'error')
102121
return redirect(url_for('urls'))
103-
return render_template('result.html', url=url, checks=checks)
104122

123+
return render_template('result.html', url=url_record, checks=checks)
105124

106125

107126
@app.route('/check_url/<int:url_id>', methods=['POST'])
@@ -110,13 +129,13 @@ def add_check(url_id):
110129
cur = conn.cursor()
111130

112131
cur.execute('SELECT name FROM urls WHERE id = %s', (url_id,))
113-
url = cur.fetchone()
132+
url_row = cur.fetchone()
114133

115-
if url is None:
134+
if url_row is None:
116135
flash('URL не найден.', 'error')
117136
return redirect(url_for('urls'))
118137

119-
url_name = url[0]
138+
url_name = url_row[0]
120139

121140
# Проверка и добавление схемы к URL, если она отсутствует
122141
parsed_url = urlparse(url_name)
@@ -140,10 +159,13 @@ def add_check(url_id):
140159
description_content = description_tag['content'] if description_tag else None
141160

142161
# Записываем код статуса и SEO-данные в базу данных
143-
cur.execute('''
162+
cur.execute(
163+
'''
144164
INSERT INTO url_checks (url_id, status_code, h1, title, description)
145165
VALUES (%s, %s, %s, %s, %s)
146-
''', (url_id, response.status_code, h1_content, title_content, description_content))
166+
''',
167+
(url_id, response.status_code, h1_content, title_content, description_content)
168+
)
147169

148170
conn.commit()
149171
flash('Страница успешно проверена', 'success')
@@ -157,8 +179,5 @@ def add_check(url_id):
157179
return redirect(url_for('url_detail', url_id=url_id))
158180

159181

160-
161-
162182
if __name__ == '__main__':
163-
app.run(debug=True)
164-
183+
app.run(debug=True)

0 commit comments

Comments
 (0)