简介
Flask诞生于2010年,是Armin ronacher(人名)用 Python 语言基于 Werkzeug 工具箱编写的轻量级Web开发框架。
Flask 本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login,数据库Flask-SQLAlchemy),都需要用第三方的扩展来实现。比如可以用 Flask 扩展加入ORM、窗体验证工具,文件上传、身份验证等。Flask 没有默认使用的数据库,你可以选择 MySQL,也可以用 NoSQL。
其 WSGI 工具箱采用 Werkzeug(路由模块),模板引擎则使用 Jinja2。这两个也是 Flask 框架的核心。
常用的扩展包
# 导入Flask类
from flask import Flask
#Flask类接收一个参数__name__
app = Flask(__name__)
# 装饰器的作用是将路由映射到视图函数index
@app.route(‘/‘)
def index():
return ‘Hello World‘
# Flask应用程序实例的run方法启动WEB服务器
if __name__ == ‘__main__‘:
app.run()
python helloworld.py
app.config.get(name)
app.config[name]
主要使用以下三种方式:
从配置对象中加载
app.config.from_object(配置对象)
class DefaultConfig(object):
"""默认配置"""
SECRET_KEY = ‘TPmi4aLWRbyVq8zu9v82dWYW1‘
app = Flask(__name__)
app.config.from_object(DefaultConfig)
@app.route("/")
def index():
print(app.config[‘SECRET_KEY‘])
return "hello world"
class DevelopmentConfig(DefaultConfig):
DEBUG=True
从配置文件中加载
app.config.from_pyfile(配置文件)
新建一个配置文件setting.py
SECRET_KEY = ‘TPmi4aLWRbyVq8zu9v82dWYW1‘
在Flask程序文件中
app = Flask(__name__)
app.config.from_pyfile(‘setting.py‘)
@app.route("/")
def index():
print(app.config[‘SECRET_KEY‘])
return "hello world"
Flask使用环境变量加载配置的本质是通过环境变量值找到配置文件,再读取配置文件的信息,其使用方式为
app.config.from_envvar(‘环境变量名‘)
关于silent
的说明:
表示系统环境变量中没有设置相应值时是否抛出异常
应用场景:
配置文件的地址不固定;
在代码中不想暴露真实的配置文件地址,只在运行代码的服务器上才有真实配置文件的信息。
使用工厂模式创建Flask app,并结合使用配置对象与环境变量加载配置
def create_flask_app(config):
"""
创建Flask应用
:param config: 配置对象
:return: Flask应用
"""
app = Flask(__name__)
app.config.from_object(config)
# 从环境变量指向的配置文件中读取的配置信息会覆盖掉从配置对象中加载的同名参数
app.config.from_envvar("PROJECT_SETTING", silent=True)
return app
class DefaultConfig(object):
"""默认配置"""
SECRET_KEY = ‘itcast1‘
class DevelopmentConfig(DefaultConfig):
DEBUG=True
# app = create_flask_app(DefaultConfig)
app = create_flask_app(DevelopmentConfig)
@app.route("/")
def index():
print(app.config[‘SECRET_KEY‘])
return "hello world"
可以指定运行的主机IP地址,端口,是否开启调试模式
app.run(host="0.0.0.0", port=5000, debug = True)
关于DEBUG调试模式
返回上一个页面
redirect
HTTP referrer
查询参数
next = request.full_path
结合二者
def redirect_back(defualt=‘Login‘, **kwargs):
for target in request.args.get(‘next‘), request.referrer:
if target:
return redirect(url_for(target))
return redirect(url_for(defualt, **kwargs))
安全性
web安全防范
Url_for
Make_response()
Abort()
Jsonify()
Set_cookie()
App.secret_key=‘asdasdas‘
Session[‘login_in‘] = True
重定向到上一个界面
(1)HTTP referer
Request.referrer
(2)查询参数
next = request.full_path
安全防范
验证器
db.create_all
Flask_login
Loginmanager()
UserMixin
原文:https://www.cnblogs.com/sunyongdi/p/15149616.html