一、REST 简介
REST(Representational State Transfer)是一种软件架构风格或者开发模式,主要面向可以在多种系统之间提供标准的数据通信功能的 Web 服务。
而 REST 风格的 Web 服务则允许请求端通过统一的、预先定义好的无状态行为来访问和操作服务端数据。
详细不懂的,网上一堆文档说明。
推荐: 阮一峰大神写的 RESTful API 设计指南
二、环境搭建
当前的系统开发环境
- Python 3.10.7 (当前最新)
- pyenv 结合pyenv-virtualenv管理多版本环境
- Flask==2.2.2
- Flask-SQLAlchemy==3.0.2
- PyMySQL==1.0.2
- passlib==1.7.4
- Flask-JWT-Extended==4.4.4
- marshmallow-sqlalchemy==0.28.1
当然如果Python环境不会安装和配置,推荐使用 Anaconda , 一键安装配置。 不过最好还是自己安装配置一下,因为这样自己会有很多成长经验。比如说cli命令熟悉度、包安装不上(源更换等)等。
pyenv 和 pyenv-virtualenv 这两个版本管理包不会安装,可直接网上搜索教程。很简单的哦~
Github: pyenv
Github: pyenv-virtualenv
环境安装命令
# 创建 3.10.7 的开发环境,环境独立不与电脑中其它项目冲突,方便后继不用时删除
pyenv virtualenv 3.10.7 dev3.10
# 进入项目目录
cd ~/flask-rest-api
# 激活环境
pyenv shell dev3.10
虚拟环境安装 flask
pip install flask
安装后来一个最简单的 Hello world 作为一个开始。
# hello.py
# 示例为官方最小应用
# https://flask.palletsprojects.com/en/2.2.x/quickstart/#a-minimal-application
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
return "<p>Hello, World!</p>"
要运行以上最小应用使用以下命令:
FLASK_APP=hello.py flask run
SQLAlchemy
SQLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射(ORM)工具,使用MIT许可证发行。
SQLAlchemy“采用简单的Python语言,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型”。SQLAlchemy的理念是,SQL数据库的量级和性能重要于对象集合;而对象集合的抽象又重要于表和行。因此,SQLAlchemy采用了类似于Java里Hibernate的数据映射模型,而不是其他ORM框架采用的Active Record模型。不过,Elixir和declarative等可选插件可以让用户使用声明语法。
SQLAlchemy首次发行于2006年2月,并迅速地在Python社区中成为广泛使用的ORM工具之一,不亚于Django的ORM框架。
安装命令:
pip install flask-sqlalchemy
数据库配置,为了简单使用 sqlite, 当然也可以使用 MySQL驱动包 PyMySQL进行MySQL的使用。这个是没有限制的。
数据库配置代码如下:
# run.py
# 引入核心包
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
# 配置数据库文件
# sqlite 配置参数
# app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///./<dbname>.db'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///./blog.db'
# mysql 配置参数
# 如果使用的 mysql 可以安装 PyMySQL,并使用以下配置
# pip install pymysql
# app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://<mysql_username>:<mysql_password>@<mysql_host>:<mysql_port>/<mysql_db>'
# 初始化 db
db = SQLAlchemy(app)
# 创建文章表
class Article(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(30))
# 内容为演示就要限制 300长度
content = db.Column(db.String(300))
# 添加文章
def add(self):
db.session.add(self)
db.session.commit()
return self
# 实例化时传参数
def __init__(self, title, content):
self.title = title
self.content = content
# 打印时间显示 <Article 1>
def __repr__(self):
return '<Article %d>' % self.id
# 创建表
with app.app_context():
db.create_all()
@app.route("/")
def hello_world():
return "<p>Hello, World!</p>"
以上代码说明:
app.config[‘SQLALCHEMY_DATABASE_URI’] 会让脚本在当前文件下生成一个 sqlite 文件: blog.db。后继通过 SQLAlchemy 定义的 Class Article 为定义博客的文章表。
with app.app_context():
db.create_all()
上面代码会根据定义的model类去创建对应的表。如果定义了多个类,则会创建多个表。运行后可在对应的MySQL管理客户端查看。
0 条评论