English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Python имеет встроенную поддержку SQlite. Модуль SQlite3 включен в дистрибутив Python. В этой главе мы увидим, как приложение Flask взаимодействует с SQLite.
Создание SQLite базы данных ‘database.db’и в ней создается таблица student.
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ru.oldtoolbag.com # Date : 2020-08-08 import sqlite3 conn = sqlite3.connect('database.db') print "База данных открыта успешно"; conn.execute('CREATE TABLE students (name TEXT, addr TEXT, city TEXT, pin TEXT)') print "Таблица создана успешно"; conn.close()
У приложения Flask три функции视图.
Функция new_student() привязана к правилу URL ('/addnew'). Она отображает HTML-файл с формой информации о студенте.
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ru.oldtoolbag.com # Date : 2020-08-08 @app.route('/enternew') def new_student(): return render_template('student.html')
HTML-скрипт файла 'student.html' следующий -
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ru.oldtoolbag.com # Date : 2020-08-08 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Пример Flask</title> </head> <body> <form action="{{ url_for('addrec') }}" method="POST"> <h3>Информация о студенте</h3> Имя<br> <input type="text" name="nm"/></br> Адрес<br> <textarea name="add"/><br> Город<br> <input type="text" name="city"/><br> Почтовый индекс<br> <input type="text" name="pin"/><br> <input type="submit" value="Подтвердить"/><br> </form> </body> </html>
Как видно, данные из формы отправляются на URL => ‘/addrec’, который связан с функцией addrec().
Функция addrec() через метод POST извлекает данные из формы и вставляет их в таблицу студентов. Соответствующие сообщения о succès или ошибке в операции отображаются на ‘result.html’.
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ru.oldtoolbag.com # Date : 2020-08-08 @app.route('/addrec', methods = ['POST', 'GET']) def addrec(): if request.method == 'POST': try: nm = request.form['nm'] addr = request.form['add'] city = request.form['city'] pin = request.form['pin'] with sql.connect("database.db") as con: cur = con.cursor() cur.execute("INSERT INTO students (name, addr, city, pin) VALUES (?, ?, ?, ?)",(nm, addr, city, pin) con.commit() msg = "Record successfully added" except: con.rollback() msg = "error in insert operation" finally: return render_template("result.html", msg = msg) con.close()
result.html HTML скрипт содержит экранизированные строки для отображения результата операции {{ msg }}.
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ru.oldtoolbag.com # Date : 2020-08-08 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Пример Flask</title> </head> <body> Результат операции: {{ msg }} <h2><a href="/">Вернуться на главную страницу</a></h2> </body> </html>
Этот приложение содержит другую функцию list() представленной URL => ‘/list’. Эта функция наполняет ‘строки’ MultiDict объектом, содержащим все записи из таблицы студентов. Этот объект передается шаблону list.html.
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ru.oldtoolbag.com # Date : 2020-08-08 @app.route('/list') def list(): con = sql.connect("database.db") con.row_factory = sql.Row cur = con.cursor() cur.execute('select * from students') rows = cur.fetchall(); return render_template('list.html', rows=rows)
Этот файл list.html является шаблоном, который итерирует через набор строк и представляет данные в таблице HTML.
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ru.oldtoolbag.com # Date : 2020-08-08 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Пример Flask</title> </head> <body> <table border="1"> <thead> <td>Изменить имя</td> <td>Адрес</td> <td>Город</td> <td>Кодирование</td> </thead> {% for row in rows %} <tr> <td>{{row['name']}}</td> <td>{{row['addr']}}</td> <td>{{row['city']}}</td> <td>{{row['pin']}}</td> </tr> {% endfor %} </table> <a href="/">Вернуться на главную страницу</a> </body> </html>
В конце, правило URL => ‘/’ представляет ‘home.html’ в качестве входной точки приложения.
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ru.oldtoolbag.com # Date : 2020-08-08 @app.route('/') def home(): return render_template('home.html')
Это полная кодовая база приложения Flask-SQLite.
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ru.oldtoolbag.com # Date : 2020-08-08 from flask import Flask, render_template, request import sqlite3 as sql import sqlite3 app = Flask(__name__) @app.route('/') def home(): return render_template('home.html') @app.route('/enternew') def new_student(): return render_template('student.html') @app.route('/addrec', methods = ['POST', 'GET']) def addrec(): if request.method == 'POST': try: nm = request.form['nm'] addr = request.form['add'] city = request.form['city'] pin = request.form['pin'] with sql.connect("database.db") as con: cur = con.cursor() cur.execute("INSERT INTO students (name,addr,city,pin) VALUES (?, ?, ?, ?)", (nm, addr, city, pin)) con.commit() msg = "Record successfully added" except: con.rollback() msg = "error in insert operation" finally: return render_template("result.html", msg = msg) con.close() @app.route('/list') def list(): con = sql.connect("database.db") con.row_factory = sql.Row cur = con.cursor() cur.execute('select * from students') rows = cur.fetchall(); return render_template('list.html', rows=rows) @app.route('/init') def init(): conn = sqlite3.connect('database.db') print('Successfully opened database') conn.execute('CREATE TABLE students (name TEXT, addr TEXT, city TEXT, pin TEXT)') print('Таблица создана успешно') conn.close() return None if __name__ == '__main__': app.run(debug=True)
Запустите этот скрипт из Python shell и запустите сервер разработки. Посетите: http://localhost:5000/ В браузере будет отображен такой простой меню -
Нажать Добавить информацию о студенте Ссылка откроет форму ввода информации о студенте.
Заполните форму и отправьте. Базовые функции вставят эту запись в таблицу студентов.
Вернуться на домашнюю страницу и щелкнуть ссылку «Показать список», чтобы отобразить таблицу образцов данных.