本文章仅作为个人笔记
文末有福利
flask官网
flask项目git地址
参考的git项目
本人git项目
初始化项目(PyCharm)
-
创建项目(使用PyCharm)
- 至此最简单的flask项目完成
- 根据大众需求优化项目结构(参考书籍(Flask+Web开发:基于Python的Web应用开发实战.pdf)),具体详情可查看
-
app目录
- app目录包含所有业务代码及静态资源、数据库对象
- main目录可包含主业务逻辑
- static目录包含所有静态资源
- templates目录包含所有页面资源
- user目录为自定义目录,可自行定义
- _init_.py文件为python文件夹初始化文件,用于初始化数据和写项目初始化方法
- app目录包含所有业务代码及静态资源、数据库对象
- migrations目录
-
migrations目录包含数据库创建更新等相关信息,有命令 python3 manage.py db init 及 python3 manage.py db migrate 创建更新
-
- tests目录
- test目录包含测试相关代码
- config.py文件包含不同环境下配置内容
- .env文件包含隐私配置内容
-
requirements.txt包含所有需要的框架和版本
-
访问路由相关
-
最简单的路由
@app.route('/') def index(): return 'hello world.'
-
路由分离嵌套,例如
from .main import main as main_blueprint app.register_blueprint(main_blueprint, url_prefix='/main')
- 第一句为从app目录的main目录中引入main包并命名为main_blueprint
- 第二句为注册包含至主路由且以/main开头
- 如果想包含分离多个模块可创建多个目录多次注册
-
创建的目录必须包含_init_.py文件且编写类似如下内容,例如
from flask import Blueprint user = Blueprint('user', __name__) from . import views, errors
- 第一句为引入相应类包
- 第二句为初始化Blueprint对象,'user'内容可自行定义
- 第三局为导入编写的相应的业务代码逻辑
-
-
限定请求方式,例如
@app.route('/', methods=['GET','POST']) def index(): return 'hello world.'
-
获取请求url传参REST,例如
@user.route('/<user_id>', methods=['GET', 'POST']) def index(user_id): return 'hello world.' + str(user_id)
-
获取post请求参数
-
先导入必要变量
from flask import request
-
获取form表单参数
request.form.get("key", type=str, default=None)
-
获取json数据
request.get_json()
-
获取text数据
bytes.decode(request.get_data())
更多可参考官方文档
-
-
数据库相关
-
初始化数据库(记得在配置文件(config.py)中配置数据库配置例:SQLALCHEMY_DATABASE_URI = mysql+mysqldb:/root:root@127.0.0.1.:3306/test?charset=utf8)
-
方式一:
from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) db = SQLAlchemy(app)
-
方式二:例如
from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() def create_app(config_name): app = Flask(__name__) app.config.from_object(config[config_name]) config[config_name].init_app(app) db.app = app db.init_app(app) return app
-
-
插入数据
from . import db from .models import User user_info = User(user_name='user name', age = 18) db.session.add(user_info) db.session.commit() db.session.close()
-
查询数据
from . import db from .models import User users = db.session.query(User).filter(User.user_name == 'user name').all() # 查询所有 user = db.session.query(User).filter(User.user_name == 'user name').scalar() # 查询单条,当无数据时返回None
-
更新数据
from . import db from .models import User user = bd.session.query(User).filter(User.user_name == 'user name').scalar() user.age = 20 db.session.add(user) db.session.commit()
-
删除数据
from . import db from .models import User user = db.session.query(User).filter(User.user_name == 'user name').scalar() db.session.delete(user)
-
更多可参考官方文档
最后送一本福利书