Flask是一个python轻量级web框架,能够非常快速的就能把程序搭建起来,Flask是基于Python开发并且依赖jinja2和Werkzeng WSGI服务的一个微型框架,对于Werkzeng WSGI本质是Socket服务端,其用来接受http请求,并对请求进行预处理,然后出发flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器。
“微”(micro) 并不表示你需要把整个 Web 应用塞进单个 Python 文件(虽然确实可以 ),也不意味着 Flask 在功能上有所欠缺。微框架中的“微”意味着 Flask 旨在保持核心简单而易于扩展。Flask 不会替你做出太多决策——比如使用何种数据库。而那些 Flask 所选择的——比如使用何种模板引擎——则很容易替换。除此之外的一切都由可由你掌握。如此,Flask 可以与您珠联璧合。
默认情况下,Flask 不包含数据库抽象层、表单验证,或是其它任何已有多种库可以胜任的功能。然而,Flask 支持用扩展来给应用添加这些功能,如同是 Flask 本身实现的一样。众多的扩展提供了数据库集成、表单验证、上传处理、各种各样的开放认证技术等功能。Flask 也许是“微小”的,但它已准备好在需求繁杂的生产环境中投入使用。
#Flask依赖一个实现wsgi协议的模块:werkzeug
from werkzeug.wrappers import Request, Response
@Request.application
def hello(request):
return Response('Hello World!')
if __name__ == '__main__':
from werkzeug.serving import run_simple
run_simple('localhost', 4000, hello)
1.Windows上开发环境准备
Anaconda(Python集成开发环境)
Pycharm
首先打开Anaconda,新建flask环境,打开建好的flask环境,安装flask依赖,前期较少,只需安装flask包即可,
2.利用flask创建Hello world
打开pycharm,新建一个文件夹,随意命名,在文件夹中创建一个python文件,
from flask import Flask
app = Flask(__name__) #实例化一个Flask对象
@app.route('/') #创建路由(指url规划)
def hello_world(): #创建方法
return 'Hello World'
if __name_ == '__main__':
app.run())
直接在命令窗口键入 python XXX.py运行
3.路由规划
Flask路由规划有两种方式,第一种是app方式,如下:
@app.route('/') #创建路由(指url规划)
def hello_world(): #创建方法
return 'Hello World'
@app.route('/set')
def set()
pass
第二种方式是:蓝牙注入方式,如下:创建一个py文件,test.py
from flask import Blueprint
route_test = Blueprint("test_page",__name__)
@route_test('/')
def hello_world():
return "Hello World"
@route_test('/hello'):
def hello():
return "Hello"
然后再主程序进行注册
from flask import Flask
from test import route_test
app = Flask(__name__) #实例化一个Flask对象
app.register_blueprint(route_test,url_prefix='/test')
@app.route('/') #创建路由(指url规划)
def hello_world(): #创建方法
return 'Hello World'
if __name_ == '__main__':
app.run())
4.链接管理器和版本管理
4.1. 为什么需要链接管理器呢?众所周知,在企业中,项目不是一成不变的,而是进行不断地迭代,那随着我们项目的逐渐增大,会有一些不可预知的因素,导致我们项目链接进行改变,项目中如此众多的链接,如果一个一个更改,会是一个很大的工作量,但是我们通过链接管理器,对项目中的链接进行统一管理,那就会很容易更改。
from flask import Flask,url_for #Flask链接管理器一般用url_for进行实现
from test import route_test
app = Flask(__name__) #实例化一个Flask对象
app.register_blueprint(route_test,url_prefix='/test')
@app.route('/') #创建路由(指url规划)
def hello_world(): #创建方法
url = url_for('set')
return 'Hello World' +url
@app.route('/set')
def set(): #创建方法
url = url_for('set')
return 'Hello World'
if __name_ == '__main__':
app.run())
当我们运行这个程序,在浏览器输入 127.0.0.1:5000/时,
浏览器会显示 Hello World /set
即url_for会通过这个方法,找到这个方法的路由
那么链接管理器到底是什么呢?
我们可以在pycharm中新建一个 python package,名字为commom,在commom目录下新建一个 python package,名字为libs(存放一些类和封装的方法),在lib目录下创建一个py文件 UrlManage.py(统一封装的连接管理器的方法)
class UrlManage(object):
@staticmethod
def buildUrl(path): #该方法是定义链接
return path
@staticmethod
def buildStaticUrl(path):
return path
from flask import Flask,url_for #Flask链接管理器一般用url_for进行实现
from test import route_test
from common.libs import UrlManage #引入统一链接管理器
app = Flask(__name__) #实例化一个Flask对象
app.register_blueprint(route_test,url_prefix='/test')
@app.route('/') #创建路由(指url规划)
def hello_world(): #创建方法
url = url_for('set')
url_1 = UrlManage.buildUrl('/set') #将链接管理进行剥离,意思就是让我们的链接管理器,走到哪都可以用
return 'Hello World ,url:%s,url_1:%s'%(url,url_1)
@app.route('/set')
def set(): #创建方法
url = url_for('set')
return 'Hello World'
if __name_ == '__main__':
app.run())
4.2.版本管理,当我们发布一个项目到生产环境中时,随着需求的演变,项目会相应的做一些升级,如果我们更新静态文件到服务器中,因为浏览器是有缓存的,如果我们不做特殊的标识,或者不用一些特殊的手段进行更新,那浏览器可能就不能体现出我们的更新,用户看到的东西可能不是我们想要看到的
class UrlManage(object):
@staticmethod
def buildUrl(path): #该方法是定义链接
return path
@staticmethod
def buildStaticUrl(path):
path = path + '?ver=' + '2018121701' #我们一般会在静态文件加入版本号
return UrlManage.buildUrl(path)
5.日志系统
app.logger.debug('A value for debugging')
app.logger.warning('A warning occurred (%d apples)', 42)
app.logger.error('An error occurred')
6.错误处理器
#errorhandler(*args, **kwargs)
#A decorator that is used to register a function give a given error code. Example:
@app.errorhandler(404)
def page_not_found(error):
return 'This page does not exist', 404
7.数据库ORM
Flask有一个比较好的ORM插件 Flask-SQLAlchemy
pip install flask_sqlalchemy
安装mysql数据库插件
pip install mysqlclient
8.搭建高可用的flask mvc框架
application.py 封装的Flask全局变量,包括app,数据库等
common(Python Package) 存放共用部分
common/libs(Python Package) 公用方法或者类
common/models(Python Package) 所有数据库的model
config(Python Package) 配置文件
config/base_setting.py 基础配置
config/develop_setting 开发环境
config/local_setting_demo.py 本地开发环境配置的demo
config/production_setting.py 生产环境的配置
docs(directory) 文档存放
Mysql.MD 所有数据库的变更必须在这里记录
jobs(Python Package) 定时任务
bin
tasks 所有定时任务都存放在这里
manage.py 启动入口
release.sh 系统自己的简单操作脚本,包括更新代码,重启应用
requirement.txt Python 扩展
uwsgi.ini 生产环境uwsgi
web(Python Package) HTTP存放
controllers 所有c层放在这里
interceptors 拦截器相关
static 静态文件
templates 模板文件
www.py HTTP模块相关初始化