Flask
1.简介
Python Flask是一个轻量级的Web应用程序框架,它是使用Python编写的,用于快速开发Web应用程序和API。它的设计理念是简单、易用和可扩展。
以下是Python Flask的一些主要特点:
- 轻量级:Flask没有多余的库和工具包,使其非常轻量级,这也意味着您可以根据需要添加自己的库。
- 易用性:Flask的API非常简单,易于理解和学习,因此它非常适合初学者。
- 可扩展性:Flask是可扩展的,您可以添加插件来增强其功能,并且可以很容易地将其与其他库和框架集成。
- 灵活性:Flask允许您选择所需的组件,例如模板引擎、数据库、表单验证等等。
- 集成度高:Flask支持与其他Python库和框架的集成,如SQLAlchemy、WTForms、Jinja2等等。
- RESTful支持:Flask易于使用RESTful API,并且可以轻松地创建RESTful Web服务。
本文中,将构建一个小型 Web 应用程序,演示如何使用 psycopg2 库,允许您在 Python 中与 HighgGo 数据库进行交互。您将在 Flask 中使用它来执行基本任务,例如连接到数据库服务器、创建表、向表中插入数据以及从表中检索数据。
2.Flask 架构
Flask 是一个使用 Python 编写的 Web 应用程序框架。它使用了 Werkzeug 工具箱和 Jinja2 模板引擎。
Flask 框架主要由以下模块组成:

- 应用模块:Flask 的核心模块,是整个 Web 应用程序的入口,负责接收 HTTP 请求并返回响应。它还负责路由、错误处理、上下文等功能。
- 路由模块:Flask 使用装饰器来定义 URL 路由和视图函数之间的映射关系。
- 视图模块:视图函数是 Flask Web 应用程序的核心,它处理 HTTP 请求并返回响应,可以返回 HTML 页面、JSON 数据等。
- 模板模块:Flask 使用 Jinja2 模板引擎来生成 HTML 页面。模板引擎提供了丰富的语法和过滤器,可以轻松地生成复杂的 HTML 页面。
- 数据库模块:Flask 可以轻松地与多种数据库集成,包括 MySQL、PostgreSQL、SQLite 等。
- 表单模块:Flask-WTF 是 Flask 的表单处理扩展,提供了方便的表单处理方法,可以轻松地创建表单、验证表单数据等。
- 扩展模块:Flask 的扩展模块提供了各种功能,如邮件发送、缓存、登录认证等。
3.加载 psycopg2
具体操作步骤请参考 Psycopg2 接口说明文档。
4.创建一个简单的 Flask 应用
4.1.数据库初始化
create user flask password 'Qwer@1234'; create database flask_db owner flask;
|
flask_app 目录创建文件 init_db.py ,添加如下代码
import psycopg2
conn = psycopg2.connect( host='192.168.100.101', database='flask_db', user='flask', password='Qwer@1234')
cur = conn.cursor()
cur.execute('drop table if exists student;')
cur.execute('create table student (stu_no serial primary key,' 'stu_name varchar (150) not null,' 'stu_sex varchar (10),' 'stu_age integer ,' 'stu_birthday timestamp);' )
cur.execute('insert into student (stu_name, stu_sex, stu_age, stu_birthday)' 'values (%s, %s, %s, %s)', ('小明', '男', 8, '2016-01-01') )
cur.execute('insert into student (stu_name, stu_sex, stu_age, stu_birthday)' 'values (%s, %s, %s, %s)', ('小华', '女', 7, '2017-12-12') )
conn.commit()
cur.close() conn.close()
|
使用python命令在终端中运行init_db.py文件,执行完成且没有错误,一个新的 student 表将添加到您的flask_db数据库中
\c flask_db flask select * from student; flask_db=> select * from student; stu_no | stu_name | stu_sex | stu_age | stu_birthday --------+----------+---------+---------+--------------------- 1 | 小明 | 男 | 8 | 2016-01-01 00:00:00 2 | 小华 | 女 | 7 | 2017-12-12 00:00:00 (2 行记录)
|
4.2.查询展示
创建一个带有索引页面的 Flask 应用程序,该页面检索数据库中的 student 并显示它们。
在flask_app目录中打开一个名为app.py的文件,添加如下代码:
import psycopg2 from flask import Flask, render_template
app = Flask(__name__)
def get_db_connection(): conn = psycopg2.connect(host='192.168.100.101', database='flask_db', user='flask', password='Qwer@1234') return conn
@app.route('/') def index(): conn = get_db_connection() cur = conn.cursor() cur.execute('select * from student;') students = cur.fetchall() cur.close() conn.close() return render_template('index.html', students=students)
|
创建一个templates目录,然后打开一个名为base.html的新模板:
mkdir templates vim templates/base.html
|
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{% block title %} {% endblock %}- FlaskApp</title> <style> nav a { color: font-size: 3em; margin-left: 50px; text-decoration: none; }
.stu { padding: 20px; margin: 10px; background-color: }
</style> </head> <body> <nav> <a href="{{ url_for('index') }}">FlaskApp</a> </nav> <hr> <div class="content"> {% block content %} {% endblock %} </div> </body> </html>
|
打开一个名为index.html的模板。这是您在app.py文件中引用的模板:
{% extends 'base.html' %}
{% block content %} <h1>{% block title %} Students {% endblock %}</h1> {% for student in students %} <div class='stu'> <h3>No.{{ student[0] }}</h3> <i><p>姓名:{{ student[1] }}</p></i> <i><p>性别:{{ student[2] }}</p></i> <i><p>年龄:{{ student[3] }}</p></i> <i><p>生日:{{ student[4] }}</p></i> </div> {% endfor %} {% endblock %}
|
运行应用程序
在开发服务器运行的情况下,使用浏览器访问以下 URL:
