Flask 概要
#python#
Flask 是两个轻量的 Python Web 合作开发架构。它具备单纯、灵巧、易扩充的特征,适用作于构筑各式各样类型的较大型和小型 Web 应用领域程序。
Flask 的中心思想是将 Web 合作开发操作过程中的各部份展开分立,比如允诺处置、URL 路由器、模版图形等,使合作开发人员能更为著眼于销售业务方式论的同时实现。它提供更多了一连串辅助工具和扩充,协助合作开发人员加速同时实现市场需求。
与其它 Web 架构较之,Flask 的竞争优势是它的单纯性和稳定性,这使它适于用作加速蓝本合作开发和较大型 Web 应用领域的构筑。它没繁杂的实用性和束缚,能让合作开发人员加速上手,因此具备较好的扩充性,能依照市场需求加进各式各样插件和扩充。
总体而言,Flask 是两个十分杰出的 Web 合作开发架构,适用作于各式各样情景,是加速构筑 Web 应用领域的平庸优先选择。
Flask 基本上用语
Flask 的基本上用语如下表所示:加装 Flask:在实用性文档或终端产品中继续执行下列命令,方可顺利完成加装。
pip install Flask
建立 Flask 应用领域:在 Python 文档中导入 Flask 库,建立 Flask 应用领域第一类,标识符如下表所示:
from flask import Flaskapp = Flask(name)
表述路由器:采用 Flask 的 route 点缀器表述允诺 URL 和相关联的描述符,标识符如下表所示:
@app.route(/)defindex():returnHello, Flask!开启 Flask 应用领域:采用 Flask 应用领域第一类的 run 方式开启 Flask 应用领域,标识符如下表所示:pythonCopy codeif name ==main: app.run()
测试 Flask 应用领域:在浏览器中访问http://localhost:5000,查看 Flask 应用领域的输出。以上是 Flask 的基本上用语,你能通过编写标识符同时实现更繁杂的功能,比如处置表单数据、采用模版图形页面、设置路由器参数等
Flask 高级用语
Flask 高级用语包括:模版图形:Flask 采用 Jinja2模版引擎展开模版图形,能动态生成 HTML 页面。
from flask import Flask, rendertemplateapp = Flask(name)@app.route(/)defindex():return rendertemplate(index.html)
在模板文档 index.html 中采用 Jinja2语法,比如:
Flask 高级用语- 模版图形
{{ title }}
{{ message }}
表单处置:Flask 支持处置 HTML 表单数据,比如:
from flask import Flask, request, rendertemplateapp = Flask(name)@app.route(/, methods=[GET,POST])defindex():if request.method ==POST: username = request.form[username]returnHello,{}!.format(username)return rendertemplate(index.html)
在模版文档 index.html 中建立 HTML 表单,比如:
Flask 高级用语- 表单处置
路由器参数:Flask 能在 URL
from flask import Flaskapp = Flask(name)@app.route(/user/)defuser(username):returnHello,{}!.format(username)
在浏览器中访问 http://localhost:5000/user/flask,方可看到“Hello, flask!”的输出。
数据库:Flask 支持采用多种数据库,比如 SQLite、MySQL、PostgreSQL 等,能采用 Flask-SQLAlchemy 模块简化数据库操作。
from flask import Flaskfrom flasksqlalchemy import SQLAlchemyapp = Flask(name)app.config[SQLALCHEMYDATABASEURI]= sqlite:///test.dbdb = SQLAlchemy(app)classUser(db.Model): id = db.Column(db.Integer, primarykey=True) username = db.Column(db.String(80), unique=True, nullable=False) email = db.Column(db.String(120), unique=True, nullable=False)defrepr(self):return% (/)defindex(): user = User.query.first()returnHello,{}!.format(user.username)
文档上传:Flask 支持文档上传,比如:
from flask import Flask, request, rendertemplateapp = Flask(name)@app.route(/, methods=[GET,POST])defindex():if request.method ==POST: file = request.files[file] file.save(uploads/+ file.filename)return文档上传成功!return rendertemplate(index.html)
在模版文档 index.html 中建立 HTML 文档上传表单,比如:
Flask 高级用语- 文档上传
认证和授权:Flask 能采用 Flask-Login 模块同时实现用户认证和授权功能。
from flask import Flask, redirect, urlfor, request, rendertemplatefrom flasklogin import LoginManager, UserMixin, loginuser, logoutuser, loginrequiredapp = Flask(name)app.secretkey =secretkeyloginmanager = LoginManager()loginmanager.initapp(app)classUser(UserMixin):definit(self, id): self.id = id self.username =user+ str(id) self.password = self.username +secretdefrepr(self):return% self.usernameusers =[User(id) for id in range(1,6)]@loginmanager.userloaderdefloaduser(userid):return users[int(userid)- 1]@app.route(/)defindex():return首页@app.route(/login, methods=[GET,POST])deflogin():if request.method ==POST: username = request.form[username] password = request.form[password]for user in users:if user.username == username and user.password == password: loginuser(user)return redirect(urlfor(protected))return用户名或密码错误!return rendertemplate(login.html)@app.route(/logout)@loginrequireddeflogout(): logoutuser()return redirect(urlfor(index))@app.route(/protected)@loginrequireddefprotected():return登录成功!if name ==main: app.run(debug=True)
在上面的标识符中,通过 loginmanager.userloader 点缀器为 Flask-Login 指定两个用户加载回调函数,在这个回调函数中,依照给定的用户 ID 返回两个用户第一类。通过@loginrequired 点缀器保护了一些页面,要求登录后才能访问,否则会被重定向到登录页面。如果你需要更多信息,请参阅 Flask-Login 官方文档