11import os
2- from flask import Flask , render_template
2+ from flask import Flask , render_template , request , redirect , flash , url_for
3+ import psycopg2
34from dotenv import load_dotenv
5+ import validators
46
57load_dotenv ()
8+ DATABASE_URL = os .getenv ('DATABASE_URL' )
69
710app = Flask (__name__ )
8- app .config [ 'SECRET_KEY' ] = os . getenv ( 'SECRET_KEY' )
11+ app .secret_key = 'your_secret_key' # Замените на ваш секретный ключ
912
10- @app .route ('/' )
13+
14+ def get_db_connection ():
15+ conn = psycopg2 .connect (DATABASE_URL )
16+ return conn
17+
18+
19+ @app .route ('/' , methods = ['GET' , 'POST' ])
1120def index ():
21+ if request .method == 'POST' :
22+ url = request .form ['url' ]
23+ if not validators .url (url ) or len (url ) > 255 :
24+ flash ('Неверный URL-адрес!' , 'error' )
25+ return redirect (url_for ('index' ))
26+
27+ conn = get_db_connection ()
28+ cur = conn .cursor ()
29+ try :
30+ cur .execute ('INSERT INTO urls (name) VALUES (%s)' , (url ,))
31+ conn .commit ()
32+ flash ('URL успешно добавлен!' , 'success' )
33+ except psycopg2 .IntegrityError :
34+ conn .rollback ()
35+ flash ('Этот URL уже существует!' , 'error' )
36+ finally :
37+ cur .close ()
38+ conn .close ()
39+
40+ return redirect (url_for ('index' ))
41+
1242 return render_template ('index.html' )
1343
14- @app .route ('/urls' )
15- def all_urls ():
16- pass
1744
18- @app .route ('/urls' , methods = ['POST' ])
19- def add_url ():
20- pass
45+ @app .route ('/urls' , methods = ['GET' ])
46+ def urls ():
47+ conn = get_db_connection ()
48+ cur = conn .cursor ()
49+ cur .execute ('SELECT * FROM urls ORDER BY created_at DESC' )
50+ urls = cur .fetchall ()
51+ cur .close ()
52+ conn .close ()
53+
54+ return render_template ('urls.html' , urls = urls )
55+
56+
57+ @app .route ('/urls/<int:url_id>' , methods = ['GET' ])
58+ def url_detail (url_id ):
59+ conn = get_db_connection ()
60+ cur = conn .cursor ()
61+ cur .execute ('SELECT * FROM urls WHERE id = %s' , (url_id ,))
62+ url = cur .fetchone ()
63+ cur .close ()
64+ conn .close ()
65+
66+ if url is None :
67+ flash ('URL не найден!' , 'error' )
68+ return redirect (url_for ('urls' ))
69+
70+ return render_template ('url_detail.html' , url = url )
71+
2172
22- __all__ = ['app' ]
2373if __name__ == '__main__' :
24- app .run ()
74+ app .run (debug = True )
75+
76+
77+
78+ #
79+ # @app.route('/urls', methods=['POST'])
80+ # def add_url():
81+ # pass
0 commit comments