Permalink
Browse files

Uproszczenie i oczyszczenie kodu oraz drobne poprawki scenariusza ToDo.

  • Loading branch information...
xinulsw committed Oct 28, 2015
1 parent 04f72ee commit cf45f8003a3b477b67ca4f513747af38faf313b4
@@ -124,11 +124,11 @@ z nią z poziomu naszej aplikacji. W pliku :file:`todo.py` dodajemy:
:linenos:
Na początku uzpełniliśmy importy. Następnie w konfiguracji aplikacji dodaliśmy
klucz zabezpieczający sesje, ustawiliśmy ścieżkę do pliku bazy danych
klucz zabezpieczający sesję, ustawiliśmy ścieżkę do pliku bazy danych
w katalogu aplikacji (stąd użycie funkcji ``app.root_path``) oraz nazwę aplikacji.
Utworzyliśmy również trzy funkcje odpowiedzialne za nawiązywanie
(``connect_db``, ``get_db``) i kończenie (``close_db``) połączenia z bazą danych.
Utworzyliśmy również dwie funkcje odpowiedzialne za nawiązywanie
(``get_db``) i kończenie (``close_db``) połączenia z bazą danych.
Lista zadań
************
@@ -215,9 +215,8 @@ Następnie do widoku strony głównej dopisujemy kod obsługujący zapisywanie d
W dekoratorze dodaliśmy obsługę żądań POST, w widoku ``index()`` natomiast
instrukcję warunkową (``if``), która je wykrywa.
Dlej sprawdzamy, czy przesłane pole formularza jest puste.
Jeśli tak, ustawiamy zmienną ``error``.
Jeśli nie przygotowujemy dane, łączymy się z bazą, zapisujemy nowe zadanie
Dlej sprawdzamy, czy przesłane pole formularza jest puste. Jeśli tak, ustawiamy zmienną ``error``.
Jeśli nie, przygotowujemy dane, łączymy się z bazą, zapisujemy nowe zadanie
i tworzymy koumnikat potwierdzający.
Na koniec przekierowujemy użytkownika do widoku głównego (``redirect(url_for('index'))``),
ale tym razem z żądaniem GET, którego obsługa jest taka jak poprzednio,
@@ -295,8 +294,8 @@ głównym i przed kodem uruchamiającym aplikację (``if __name__ == '__main__':
.. highlight:: python
.. literalinclude:: todo_z7.py
:linenos:
:lineno-start: 38
:lines: 63-70
:lineno-start: 64
:lines: 64-71
W szablonie :file:`zadania_lista.html` modyfikujemy fragment wyświetlający
listę zadań i dodajemy formularz:
View
Binary file not shown.
@@ -5,6 +5,7 @@
app = Flask(__name__)
@app.route('/')
def index():
return 'Cześć, tu Python!'
@@ -3,35 +3,35 @@
from flask import Flask, g
app = Flask(__name__)
import os
import sqlite3
app = Flask(__name__)
app.config.update(dict(
SECRET_KEY = 'bardzosekretnawartosc',
DATABASE = os.path.join(app.root_path, 'db.sqlite'),
SITE_NAME = 'Moje zadania'
SECRET_KEY='bardzosekretnawartosc',
DATABASE=os.path.join(app.root_path, 'db.sqlite'),
SITE_NAME='Moje zadania'
))
def connect_db():
"""Nawiazywanie połaczenia z bazą danych określoną w konfiguracji"""
rv = sqlite3.connect(app.config['DATABASE'])
rv.row_factory = sqlite3.Row
return rv
def get_db():
"""Funkcja pomocnicza tworząca połączenie z bazą danych"""
if not hasattr(g, 'db'): # jeżeli brak połączenia, to je tworzymy
g.db = connect_db()
return g.db # zwracamy połączenie z bazą
"""Funkcja tworząca połączenie z bazą danych"""
if not hasattr(g, 'db'): # jeżeli brak połączenia, to je tworzymy
con = sqlite3.connect(app.config['DATABASE'])
con.row_factory = sqlite3.Row
g.db = con # zapisujemy połączenie w kontekście aplikacji
return g.db # zwracamy połączenie z bazą
@app.teardown_request
def close_db(error):
"""Zamykanie połączenia z bazą"""
if hasattr(g, 'db'):
g.db.close()
@app.route('/')
def index():
return 'Cześć, tu Python!'
@@ -4,38 +4,38 @@
from flask import Flask, g
from flask import render_template
app = Flask(__name__)
import os
import sqlite3
app = Flask(__name__)
app.config.update(dict(
SECRET_KEY = 'bardzosekretnawartosc',
DATABASE = os.path.join(app.root_path, 'db.sqlite'),
SITE_NAME = 'Moje zadania'
SECRET_KEY='bardzosekretnawartosc',
DATABASE=os.path.join(app.root_path, 'db.sqlite'),
SITE_NAME='Moje zadania'
))
def connect_db():
"""Nawiazywanie połaczenia z bazą danych określoną w konfiguracji"""
rv = sqlite3.connect(app.config['DATABASE'])
rv.row_factory = sqlite3.Row
return rv
def get_db():
"""Funkcja pomocnicza tworząca połączenie z bazą danych"""
if not hasattr(g, 'db'): # jeżeli brak połączenia, to je tworzymy
g.db = connect_db()
return g.db # zwracamy połączenie z bazą
"""Funkcja tworząca połączenie z bazą danych"""
if not hasattr(g, 'db'): # jeżeli brak połączenia, to je tworzymy
con = sqlite3.connect(app.config['DATABASE'])
con.row_factory = sqlite3.Row
g.db = con # zapisujemy połączenie w kontekście aplikacji
return g.db # zwracamy połączenie z bazą
@app.teardown_request
def close_db(error):
"""Zamykanie połączenia z bazą"""
if hasattr(g, 'db'):
g.db.close()
@app.route('/')
def index():
#return 'Cześć, tu Python!'
# return 'Cześć, tu Python!'
db = get_db()
kursor = db.execute('select * from zadania order by data_pub desc;')
zadania = kursor.fetchall()
@@ -6,35 +6,35 @@
from datetime import datetime
from flask import flash, redirect, url_for, request
app = Flask(__name__)
import os
import sqlite3
app = Flask(__name__)
app.config.update(dict(
SECRET_KEY = 'bardzosekretnawartosc',
DATABASE = os.path.join(app.root_path, 'db.sqlite'),
SITE_NAME = 'Moje zadania'
SECRET_KEY='bardzosekretnawartosc',
DATABASE=os.path.join(app.root_path, 'db.sqlite'),
SITE_NAME='Moje zadania'
))
def connect_db():
"""Nawiazywanie połaczenia z bazą danych określoną w konfiguracji"""
rv = sqlite3.connect(app.config['DATABASE'])
rv.row_factory = sqlite3.Row
return rv
def get_db():
"""Funkcja pomocnicza tworząca połączenie z bazą danych"""
if not hasattr(g, 'db'): # jeżeli brak połączenia, to je tworzymy
g.db = connect_db()
return g.db # zwracamy połączenie z bazą
"""Funkcja tworząca połączenie z bazą danych"""
if not hasattr(g, 'db'): # jeżeli brak połączenia, to je tworzymy
con = sqlite3.connect(app.config['DATABASE'])
con.row_factory = sqlite3.Row
g.db = con # zapisujemy połączenie w kontekście aplikacji
return g.db # zwracamy połączenie z bazą
@app.teardown_request
def close_db(error):
"""Zamykanie połączenia z bazą"""
if hasattr(g, 'db'):
g.db.close()
@app.route('/', methods=['GET', 'POST'])
def index():
"""Główny widok strony. Obsługuje wyświetlanie i dodawanie zadań."""
@@ -47,16 +47,16 @@ def index():
zrobione = '0'
data_pub = datetime.now()
db = get_db()
db.execute('insert into zadania (zadanie, zrobione, data_pub) values (?, ?, ?);',
[zadanie, zrobione, data_pub])
db.execute('INSERT INTO zadania VALUES (?, ?, ?, ?);',
[None, zadanie, zrobione, data_pub])
db.commit()
flash('Dodano nowe zadanie.')
return redirect(url_for('index'))
error = u'Nie możesz dodać pustego zadania!' # komunikat o błędzie
error = u'Nie możesz dodać pustego zadania!' # komunikat o błędzie
db = get_db()
kursor = db.execute('select * from zadania order by data_pub desc;')
kursor = db.execute('SELECT * FROM zadania ORDER BY data_pub DESC;')
zadania = kursor.fetchall()
return render_template('zadania_lista.html', zadania=zadania, error=error)
@@ -6,35 +6,35 @@
from datetime import datetime
from flask import flash, redirect, url_for, request
app = Flask(__name__)
import os
import sqlite3
app = Flask(__name__)
app.config.update(dict(
SECRET_KEY = 'bardzosekretnawartosc',
DATABASE = os.path.join(app.root_path, 'db.sqlite'),
SITE_NAME = 'Moje zadania'
SECRET_KEY='bardzosekretnawartosc',
DATABASE=os.path.join(app.root_path, 'db.sqlite'),
SITE_NAME='Moje zadania'
))
def connect_db():
"""Nawiazywanie połaczenia z bazą danych określoną w konfiguracji"""
rv = sqlite3.connect(app.config['DATABASE'])
rv.row_factory = sqlite3.Row
return rv
def get_db():
"""Funkcja pomocnicza tworząca połączenie z bazą danych"""
if not hasattr(g, 'db'): # jeżeli brak połączenia, to je tworzymy
g.db = connect_db()
return g.db # zwracamy połączenie z bazą
"""Funkcja tworząca połączenie z bazą danych"""
if not hasattr(g, 'db'): # jeżeli brak połączenia, to je tworzymy
con = sqlite3.connect(app.config['DATABASE'])
con.row_factory = sqlite3.Row
g.db = con # zapisujemy połączenie w kontekście aplikacji
return g.db # zwracamy połączenie z bazą
@app.teardown_request
def close_db(error):
"""Zamykanie połączenia z bazą"""
if hasattr(g, 'db'):
g.db.close()
@app.route('/', methods=['GET', 'POST'])
def index():
"""Główny widok strony. Obsługuje wyświetlanie i dodawanie zadań."""
@@ -47,25 +47,26 @@ def index():
zrobione = '0'
data_pub = datetime.now()
db = get_db()
db.execute('insert into zadania (zadanie, zrobione, data_pub) values (?, ?, ?);',
[zadanie, zrobione, data_pub])
db.execute('INSERT INTO zadania VALUES (?, ?, ?, ?);',
[None, zadanie, zrobione, data_pub])
db.commit()
flash('Dodano nowe zadanie.')
return redirect(url_for('index'))
error = u'Nie możesz dodać pustego zadania!' # komunikat o bledzie
error = u'Nie możesz dodać pustego zadania!' # komunikat o błędzie
db = get_db()
kursor = db.execute('select * from zadania order by data_pub desc;')
kursor = db.execute('SELECT * FROM zadania ORDER BY data_pub DESC;')
zadania = kursor.fetchall()
return render_template('zadania_lista.html', zadania=zadania, error=error)
@app.route('/zrobione', methods=['POST'])
def zrobione():
"""Zmiana statusu zadania na wykonane."""
zadanie_id = request.form['id']
db = get_db()
db.execute('update zadania set zrobione=1 where id=?', [zadanie_id,])
db.execute('update zadania set zrobione=1 where id=?', [zadanie_id, ])
db.commit()
return redirect(url_for('index'))
Oops, something went wrong.

0 comments on commit cf45f80

Please sign in to comment.