Flask快速入门必备

1. 安装

全局安装 :
pip install Flask

采用虚拟环境:
https://dormousehole.readthedocs.io/en/latest/installation.html#id4

2. hello world

https://dormousehole.readthedocs.io/en/latest/quickstart.html#id2

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

win下:

set FLASK_APP=hello.py
python -m flask run
或者
set FLASK_APP=hello.py
flask run

第二种方式:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'


if __name__ == '__main__':
    app.run(debug=True)

然后

python hello.py

3. route 的含义

是一个装饰器,将函数名称与url关联
访问url时通过route()装饰器触发对应的函数

在flask中的路由
在这里插入图片描述

4. 蓝图 blueprint

路由规划的,通过配置更好的管理路由

## baicai.py
from flask import Blueprint
route_baicai = Blueprint('baicai_page', __name__)

@route_baicai.route('/')
def index():
    return 'this is baicai index'
    
@route_baicai.route('hello')
def hello():
    return 'this is baicai hello'
## hello.py
from flask import Flask
from baicai import route_baicai

app = Flask(__name__)
app.register_blueprint(route_baicai, url_prefix="/baicai")

@app.route('/')
def hello_world():
    return 'Index!'

@app.route('/hello')
def hello_world():
    return 'Hello, World!'

if __name__ == '__main__':
    app.run(debug=True)

意思就是遇到 /baicai 前缀的就去找baicai.py下面的 url
在这里插入图片描述
在这里插入图片描述

5. 链接管理器 url_for

快速方便统一管理url
快速获取及构建URL,方法的第一个参数指向函数名(加过@app.route注解的函数),后续的参数对应于要构建的URL变量。
在这里插入图片描述

from flask import Flask, url_for

app = Flask(__name__)

@app.route('/')
def hello():
    url = url_for('index')
    return 'hello world ' + url

@app.route('url_for')
def index():
    return 'hell index'

if __name__ == '__main__':
    app.run(debug=True)

在这里插入图片描述

# UrlManager.py
class UrlManager(object):
    @staticmethod #静态方法
    def bulidUrl(path):
        return path

    @staticmethod
    def buildStaticUrl(path):
    	path = path + "?v=" + "xxxxx"
        return UrlManager.bulidUrl(path)
from flask import Flask, url_for
from router import route_baicai
from common.libs.UrlManager import UrlManager

app = Flask(__name__)
app.register_blueprint(route_baicai, url_prefix="/baicai")


@app.route('/')
def hello():
    url = url_for('index')
    
    url_1 = UrlManager.bulidUrl('/api')

    return 'hello world, url:%s, url_1:%s'%(url, url_1)

@app.route('/url_for')
def index():
    return 'hello index'

if __name__ == '__main__':
    app.run(debug=True)

6. 日志记录系统

https://dormousehole.readthedocs.io/en/latest/quickstart.html#id22

app.logger.debug('A value for debugging')
app.logger.warning('A warning occurred (%d apples)', 42)
app.logger.error('An error occurred')

7. 错误处理器

flask.Flask.errorhandler
flask.Blueprit.errorhandler
flask.Blueprint.app_errorhandler

@app.errorhandler(404)
def page_not_found(error):
    app.logger.error(error)
    return 'not found', 404

8. 数据库 ORM

Flask-SQLAlchemy

http://www.pythondoc.com/flask-sqlalchemy/index.html

  • 安装
    pip install flask-sqlalchemy
    pip install mysqlclient
from flask import Flask, url_for
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:123456@127.0.0.1/mysql'
db = SQLAlchemy(app)

@app.route('/db')
def db_index():
    from sqlalchemy import text
    sql = text("select * from `user`")
    res = db.engine.execute(sql)
    for row in res:
        app.logger.info(row)
    return 'hello db'

9. Flask-Script

https://flask-script.readthedocs.io/en/latest/

  • 安装
    pip install Flask-Script
from flask import Flask

from flask_script import Manager

from flask_sqlalchemy import SQLAlchemy
import os
class Application( Flask ):
    def __init__(self,import_name):
        super( Application,self ).__init__( import_name )
        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 )
from application import app,manager

from flask_script import Server

##web server
manager.add_command( "runserver", Server( host='0.0.0.0',port=app.config['SERVER_PORT'],use_debugger = True ,use_reloader = True) )

def main():
    manager.run( )

if __name__ == '__main__':
    try:
        import sys
        sys.exit( main() )
    except Exception as e:
        import traceback
        traceback.print_exc()

python manager.py runserver 启动

10. 打造一个高可用flask mvc框架

(暂时略)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

11. 生产部署

  • 单进程启动服务

python manager.py runserver的方式

  • 多进程启动服务

使用 uwsgi

参考:

uwsgi.ini

[uwsgi]
#源码目录
chdir=/data/www/Order
#python 虚拟环境
home=/data/www/python3_vir
module=manager
callable=app
master=true
processes=4
http=0.0.0.0:8889
socket=/data/www/logs/order.sock
buffer-size=65535
pidfile=/data/www/logs/order.pid
chmod-socket=777
logfile-chmod=644
daemonize=/data/www/logs/order.log
static-map = /static=/data/www/Order/web/static

nginx

	location /static {
		alias  /data/www/Order/web/static/;
	}

	location / {
		try_files $uri @yourapplication;
	}
    location @yourapplication {
      include uwsgi_params;
      uwsgi_pass unix:/data/www/logs/order.sock;
      uwsgi_read_timeout 1800;
      uwsgi_send_timeout 300;
    }
  • 理解笔记
    flask 蓝图理解和入口文件理解
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值