Flask

1.簡介

Python Flask是一個(gè)輕量級的Web應(yīng)用程序框架,它是使用Python編寫的,用于快速開發(fā)Web應(yīng)用程序和API。它的設(shè)計(jì)理念是簡單、易用和可擴(kuò)展。

以下是Python Flask的一些主要特點(diǎn):

  • 輕量級:Flask沒有多余的庫和工具包,使其非常輕量級,這也意味著您可以根據(jù)需要添加自己的庫。
  • 易用性:Flask的API非常簡單,易于理解和學(xué)習(xí),因此它非常適合初學(xué)者。
  • 可擴(kuò)展性:Flask是可擴(kuò)展的,您可以添加插件來增強(qiáng)其功能,并且可以很容易地將其與其他庫和框架集成。
  • 靈活性:Flask允許您選擇所需的組件,例如模板引擎、數(shù)據(jù)庫、表單驗(yàn)證等等。
  • 集成度高:Flask支持與其他Python庫和框架的集成,如SQLAlchemy、WTForms、Jinja2等等。
  • RESTful支持:Flask易于使用RESTful API,并且可以輕松地創(chuàng)建RESTful Web服務(wù)。

本文中,將構(gòu)建一個(gè)小型 Web 應(yīng)用程序,演示如何使用 psycopg2 庫,允許您在 Python 中與 HighgGo 數(shù)據(jù)庫進(jìn)行交互。您將在 Flask 中使用它來執(zhí)行基本任務(wù),例如連接到數(shù)據(jù)庫服務(wù)器、創(chuàng)建表、向表中插入數(shù)據(jù)以及從表中檢索數(shù)據(jù)。

2.Flask 架構(gòu)

Flask 是一個(gè)使用 Python 編寫的 Web 應(yīng)用程序框架。它使用了 Werkzeug 工具箱和 Jinja2 模板引擎。
Flask 框架主要由以下模塊組成:

image

  • 應(yīng)用模塊:Flask 的核心模塊,是整個(gè) Web 應(yīng)用程序的入口,負(fù)責(zé)接收 HTTP 請求并返回響應(yīng)。它還負(fù)責(zé)路由、錯(cuò)誤處理、上下文等功能。
  • 路由模塊:Flask 使用裝飾器來定義 URL 路由和視圖函數(shù)之間的映射關(guān)系。
  • 視圖模塊:視圖函數(shù)是 Flask Web 應(yīng)用程序的核心,它處理 HTTP 請求并返回響應(yīng),可以返回 HTML 頁面、JSON 數(shù)據(jù)等。
  • 模板模塊:Flask 使用 Jinja2 模板引擎來生成 HTML 頁面。模板引擎提供了豐富的語法和過濾器,可以輕松地生成復(fù)雜的 HTML 頁面。
  • 數(shù)據(jù)庫模塊:Flask 可以輕松地與多種數(shù)據(jù)庫集成,包括 MySQL、PostgreSQL、SQLite 等。
  • 表單模塊:Flask-WTF 是 Flask 的表單處理擴(kuò)展,提供了方便的表單處理方法,可以輕松地創(chuàng)建表單、驗(yàn)證表單數(shù)據(jù)等。
  • 擴(kuò)展模塊:Flask 的擴(kuò)展模塊提供了各種功能,如郵件發(fā)送、緩存、登錄認(rèn)證等。

3.加載 psycopg2

具體操作步驟請參考 Psycopg2 接口說明文檔。

4.創(chuàng)建一個(gè)簡單的 Flask 應(yīng)用

4.1.數(shù)據(jù)庫初始化

create user flask password 'Qwer@1234';
create database flask_db owner flask;

flask_app 目錄創(chuàng)建文件 init_db.py ,添加如下代碼

import psycopg2

conn = psycopg2.connect(
host='192.168.100.101',
database='flask_db',
user='flask',
password='Qwer@1234')

# Open a cursor to perform database operations
cur = conn.cursor()

# Execute a command: this creates a new table

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);'
)

# insert data into the table

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命令在終端中運(yùn)行init_db.py文件,執(zhí)行完成且沒有錯(cuò)誤,一個(gè)新的 student 表將添加到您的flask_db數(shù)據(jù)庫中

python init_db.py
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: #d64161;
font-size: 3em;
margin-left: 50px;
text-decoration: none;
}

.stu {
padding: 20px;
margin: 10px;
background-color: #f7f4f4;
}

</style>
</head>
<body>
<nav>
<a href="{{ url_for('index') }}">FlaskApp</a>
</nav>
<hr>
<div class="content">
{% block content %} {% endblock %}
</div>
</body>
</html>

打開一個(gè)名為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 %}

運(yùn)行應(yīng)用程序

flask run

在開發(fā)服務(wù)器運(yùn)行的情況下,使用瀏覽器訪問以下 URL:

http://127.0.0.1:5000/

image