Flask安装
- 第一个flask项目
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
路由
*1. 路由的第一种实现方法:
@app.route('/api')
def hello():
return 'Hello'
@app.route('/api/hello')
def hello_hello():
return 'hello_hello'
2.蓝牙方式:
- 第一步:新建一个文件imooc.py,在这里面管理所有的路由
# -*- coding: utf-8 -*-
# @Time : 2021/7/16 10:03
# @Author : Yang
# @Email : 2635681517@qq.com
# @File : imooc.py
# @Software: PyCharm
from flask import Blueprint
route_imooc = Blueprint("imooc_page", __name__)
@route_imooc.route("/")
def index():
return 'imooc index page'
@route_imooc.route("/hello")
def hello():
return 'imooc hello page'
@route_imooc.route('/api/hello')
def hello_hello():
return 'hello_hello'
- 第二步 在app.py中把刚才第一步的route_imooc给注册进来即可,接着启动服务直接访问http://127.0.0.1:5000/imooc/api/hello
app.register_blueprint(route_imooc, url_prefix='/imooc')
- http://127.0.0.1:5000/imooc/api/hello 对这个url进行解释:imooc是一个统一的前缀即执行过程是先到app.py中找地址然后类似重定向到imooc.py中继续进行url的拼接。
链接管理器url_for
- url_for链接管理器
- 版本管理:
- 第一步:在更目录下创建一个UrlManager类
class UrlManager(object):
@staticmethod
def buildUrl(path):
return path
@staticmethod
def buildStaticUrl(path):
path = path+"?ver"+"20210716021038"
return UrlManager.buildUrl(path)
- 第二步:
- 在app.py文件中进行调用
@app.route('/')
def hello_world():
url = url_for("index")
url_1 = UrlManager.buildUrl("/api")
url_2 = UrlManager.buildStaticUrl("/css/bootstrap")
return 'Hello World!url{0},url_1:{1},url_2:{2}'.format(url, url_1,url_2)
访问地址http://127.0.0.1:5000/ 结果如下
Hello World!url/aoi,url_1:/api,url_2:/css/bootstrap?ver20210716021038
日志系统
app.logger.debug('A value for debugging')
app.logger.warning('A warning occurred (%d apples)', 42)
app.logger.error('An error occurred')
错误处理
- 在app.py中加入,第一个是404页面处理,第二个是数据库(mysql)的错误处理
@app.errorhandler(404)
def page_not_found(error):
app.logger.error(error)
return 'This page does not exist', 404
@app.errorhandler(DatabaseError)
def special_exception_handler(error):
return 'Database connection failed', 500
数据库ORM(Flask链接数据库mysql)
- flask链接数据库
* 第一步:先安装两个库
pip install Flask-SQLAlchemy
pip install mysqlclient
* 第二步:创建config.py文件,文件内容为:
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:你的密码@ip地址或者本机local host:3306/你的数据库名'
SQLALCHEMY_TRACK_MODIFICATIONS = True
* 第三步: 在测试类(或者app.py)中进行编写测试代码:
from flask_sqlalchemy import SQLAlchemy
app.config.from_object('common.config')
db = SQLAlchemy(app, use_native_unicode='utf8')
@app.route('/aoi')
def index():
from sqlalchemy import text
sql = text("select * from user")
result = db.engine.execute(sql)
for row in result:
print(row)
app.logger.info(row)
return 'Hello index!'
访问地址:http://127.0.0.1:5000/aoi即可
问题:ModuleNotFoundError: No module named 'flask._compat
原因:flask2.0版本过高
解决办法:pip3 install flask==1.1.2
搭建基本的flask的mvc框架
第一阶段
- 基本结构图
- application.py文件内容
from flask import Flask
from flask_script import Manager
from flask_sqlalchemy import SQLAlchemy
import os
"""
通过定义Application方法封装数据(mysql、全局变量,还有通过flask_script进行Manager的搭建)
"""
class Application(Flask):
def __init__(self, import_name):
super(Application, self).__init__(import_name)
# 开始加载配置文件ops_config 是运行时传入的数据 接下来进行数据的拼接
self.config.from_pyfile('config/base_setting.py')
if "ops_config" in os.environ:
self.config.from_pyfile('config/%s_setting.py' % os.environ['ops_config'])
db.init_app(self)
db = SQLAlchemy()
app = Application(__name__)
manager = Manager(app)
- manager.py文件内容
import sys
from application import app, manager
from flask_script import Server
import traceback
import www # 引入www
# host=app.config['SERVER_IP'],
# # 配置manager自定义命令host和port,通过配置文件读取相应的数据
manager.add_command("runserver", Server(host=app.config['SERVER_IP'], port=app.config['SERVER_PORT'], use_debugger=True,
use_reloader=True))
def main():
# 这里用封装好的mananger进行run方法的调用
manager.run()
if __name__ == '__main__':
try:
sys.exit(main())
except Exception as e:
traceback.print_exc()
- base_setting.py文件内容,配置一些基础的内容端口,ip,是否开启调试模式
SERVER_PORT = '8999'
SERVER_IP = '0.0.0.0'
DEBUG = False
SQLALCHEMY_ECHO = False
- local_setting.py文件内容,里面定义了数据库(mysql)的链接过程等等内容,这个文件是开发时调用的
SQLALCHEMY_ECHO = True
DEBUG = True
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:你的数据库密码@ip地址:3306/mydb'
SQLALCHEMY_TRACK_MODIFICATIONS = True
SQLALCHEMY_ENCODING = 'utf8mb4'
SQLALCHEMY_COMMIT_TEARDOWN = True