写作责任编辑约须要5两分钟
Flask 是两个 Python 同时实现的 Web 合作开发微构架。Flask 倚赖两个内部库:Jinja2 模版发动机和 Werkzeug WSGI 开发工具。
Flask不但在Web后端合作开发、微服务项目合作开发,同时在ERP控制系统合作开发、APIUSB合作开发等应用领域,应用应用领域都十分广为。
为何要采用构架?
常常合作开发两个应用应用领域(Web应用应用领域、控制系统应用应用领域)跟修建新房子的操作过程那样,须要先打墙体,搭好金属结构,接着几块砖几块砖叠上来。而合作开发两个应用应用领域呢,反之亦然也须要两个好的体系结构,资料库可视化,接着两个组件两个组件采用标识符同时实现。
如果合作开发两个应用软件应用领域不采用构架,和我们建新房子时,每几块砖、每两根混凝土都须要他们制造出来其本质上是那样的。
而采用构架能增添许多益处,比如说提高合作开发工作效率、让应用应用领域合作开发更为规范化、开拓性更强,让开发人员把更多的心力放到销售业务方法论的同时实现上,而不是放到多次重复、繁杂的此基础自然环境上(比如说Web服务项目器、下层同时实现等)
Flask缺点Flask民主自由、灵巧,扩展性强,服务器端库的优先选择范围广,合作开发时能紧密结合他们最喜欢用的车轮,也能紧密结合最盛行最强悍的Python库
进阶单纯,即使没有啥web合作开发实战经验,也能迅速作出中文网站,十分适用于于较小型中文网站,适用于合作开发web服务项目的API
合作开发小型中文网站无阻力,但标识符构架须要他们结构设计,合作投资成本依赖于合作开发人员的潜能和实战经验
各方面性能均等于或优于Django
Flask与关系型资料库的配合采用不弱于Django,而其与NoSQL资料库的配合远远优于Django
本地web服务项目启动
app = Flask(__name__)
if __name__ == __main__:
app.run(debug=True, host=“0.0.0.0”, port=5000, threaded=True)
# 其中app为Flask实例对象,__name__代表的是当前组件本身的名称Token鉴权
# before_request所有请求过来后都要执行的,通过token能对USB进行权限控制@app.before_requestdef dashboard_verify(): dashboard_url = app.config[DASHBOARD_URL]
api_key = app.config[API_KEY]
session_id = request.cookies.get(_AJSESSIONID)
username = request.cookies.get(username)
if username == “xxxx”:
return None if username == “xxxx”:
endpoint = request.endpoint
interface_allow = is_in_scope(endpoint)
if interface_allow is True:
return None else:
return jsonify({“status”: -1, “data”: “用户没有该USB权限”})注册路由
Blueprint 是两个存储视图方法的容器,这些操作在这个Blueprint 被注册到两个应用应用领域之后就能被调用,Flask 能通过Blueprint来组织URL以及处理请求
Flask采用Blueprint让应用应用领域同时实现组件化
两个项目能具有多个Blueprint,能将两个Blueprint注册到任何两个未采用的URL下比如说 “/”、“/sample”或者子域名
蓝图是保存了一组将来能在应用应用领域对象上执行的操作,注册路由就是一种操作
当在app对象上调用 route 装饰器注册路由时,这个操作将修改对象的url_map路由表
然而,蓝图对象根本没有路由表,当我们在蓝图对象上调用route装饰器注册路由时,它只是在内部的两个延迟操作记录列表defered_functions中添加了两个项
当执行app对象的 register_blueprint() 方法时,应用应用领域对象将从蓝图对象的 defered_functions 列表中取出每一项,并以自身作为参数执行该匿名函数,即调用应用应用领域对象的 add_url_rule() 方法,这将真正的修改应用应用领域对象的usr_map路由表
from mirror.views.device_manager importdevice_manager_bp
# 注册路由app.register_blueprint(device_manager_bp)页面跳转
通过@app.route(/)指定跳转的页面,通过定义方法同时实现页面内的数据处理,将处理后的页面return传递至前端浏览器中展示内容,视图函数必须有返回内容
route()注明访问当前函数须要采用的URL;
@app.route(/)
def index():
index_page = fundation_Form()
return render_template(index.html, form=index_page)前后端参数传递
keyword为标签的name
通过method来指定请求的方式。如:method=post
POST请求:data = request.get_json()
@app.route(/mirror/automation/baselines, methods=[POST])def update_automation_baseline():data = request.get_json()
casename = data[casename]GET请求:keyword = request.args.get(keyword)
@app.route(/mirror/automation/reasons, methods=[GET])def get_automation_reasons(): date = request.args.get(date)资料库连接
MySQL连接
class Config(object): “””配置参数””” # 设置连接资料库的URL app.config[SQLALCHEMY_DATABASE_URI] = mysql://%s:%s@%s:%s/%s% (USER, PASSWORD, HOST, PORT, DB)
# 设置sqlalchemy自动更跟踪资料库 SQLALCHEMY_TRACK_MODIFICATIONS = True # 查询时会显示原始SQL语句 app.config[SQLALCHEMY_ECHO] = True # 禁止自动提交数据处理 app.config[SQLALCHEMY_COMMIT_ON_TEARDOWN] =False app.config[SQLALCHEMY_POOL_RECYCLE] = 400MongoDB连接
importpymongo
class Mongodb: def __init__(self): self.Mongo_client = pymongo.MongoClient(config.mongodb_uri, replicaSet=“xxx”)
self.mobile_autotest = self.Mongo_client.mobileautotest
self.mobile_autotest.authenticate(name=config.mongodb_user, password=config.mongodb_password)总结
如果你想搞懂Python web合作开发WSGI协议原理以及同时实现操作过程、或者你想灵巧定制组件,完全DIY你的应用应用领域、想同时实现微服务项目,那么建议你优先选择Flask。