博客
关于我
Flask基础
阅读量:426 次
发布时间:2019-03-06

本文共 3913 字,大约阅读时间需要 13 分钟。

Flask技术文档

配置文件

Flask应用程序的配置文件通常存储在settings.py中,主要用于存储应用程序的运行环境和配置参数。以下是settings.py的内容示例:

import datetimeclass Config(object):    TESTING = False    PROPAGATE_EXCEPTIONS = None    PRESERVE_CONTEXT_ON_EXCEPTION = None    SECRET_KEY = None    PERMANENT_SESSION_LIFETIME = datetime.timedelta(days=31)    USE_X_SENDFILE = False    SERVER_NAME = None    APPLICATION_ROOT = '/'    SESSION_COOKIE_NAME = 'session'    SESSION_COOKIE_DOMAIN = None    SESSION_COOKIE_PATH = None    SESSION_COOKIE_HTTPONLY = True    SESSION_COOKIE_SECURE = False    SESSION_COOKIE_SAMESITE = None    SESSION_REFRESH_EACH_REQUEST = True    MAX_CONTENT_LENGTH = None    SEND_FILE_MAX_AGE_DEFAULT = datetime.timedelta(seconds=43200)    TRAP_BAD_REQUEST_ERRORS = None    TRAP_HTTP_EXCEPTIONS = False    EXPLAIN_TEMPLATE_LOADING = False    PREFERRED_URL_SCHEME = 'http'    JSON_AS_ASCII = True    JSON_SORT_KEYS = True    JSONIFY_PRETTYPRINT_REGULAR = False    JSONIFY_MIMETYPE = 'application/json'    TEMPLATES_AUTO_RELOAD = None    MAX_COOKIE_SIZE = 4093class ProductionConfig(Config):    DEBUG = Falseclass DevelopmentConfig(Config):    DEBUG = True

配置文件导入原理

在 Flask 应用程序中,可以通过 app.config.from_object("settings.DevelopmentConfig") 导入配置文件。以下是具体实现代码:

from flask import Flaskapp = Flask(__name__)app.config.from_object("settings.DevelopmentConfig")

路由系统

Flask 的路由系统基于带参数的装饰器来定义 URL。以下是路由系统的主要特点:

  • 默认别名:如果不指定 endpoint 参数,默认使用视图函数名称作为别名。
  • 动态路由
    • /<int:nid>:接收整数类型的 nid 参数。
    • /<nid>:接收字符串类型的 nid 参数。
  • 以下是动态路由的示例:

    @app.route('/index/
    ')def index(nid): return "Index"

    视图

    FBV 模式

    FBV(Function-Based View)是 Flask 的默认视图模式,通过装饰器来实现权限控制。以下是一个简单的 FBV 示例:

    @app.route('/login', methods=['GET', 'POST'])def login():    if request.method == 'POST':        user = request.form.get('user')        password = request.form.get('password')        if user == 'aliang' and password == '007':            session['user'] = user            return redirect(url_for('index'))        return render_template('login.html', error='用户名或密码错误!')    return render_template('login.html')

    权限控制

    通过 @auth 装饰器实现用户权限控制。以下是一个简单的实现:

    @app.route('/index')@authdef index():    return render_template('index.html')

    请求相关

    Flask 提供了丰富的请求对象,主要包括:

    • request.method:获取请求方法。
    • request.args:获取 GET 请求参数。
    • request.form:获取 POST 请求参数。
    • request.values:获取所有请求参数。
    • request.cookies:获取请求 cookie。
    • request.headers:获取请求头信息。
    • request.path:获取请求路径。
    • request.url:获取完整 URL。

    以下是一个示例:

    request.method  # 获取请求方法request.args  # 获取 GET 请求参数request.form  # 获取 POST 请求参数request.files  # 获取上传文件

    响应相关

    Flask 提供了多种返回响应的方式:

  • 直接返回数据

    return "Index"return jsonify({'k1': 'v1'})
  • 定制响应头和响应体

    response = make_response("Index")response.headers['X-Custom'] = 'Custom Header'return response
  • 设置 cookie

    response.set_cookie('user', 'aliang')return response
  • 模板渲染

    Flask 的模板渲染与 Python 的语法非常相似,支持多种模板引擎。以下是一个简单的模板渲染示例:

    @app.route('/tpl')def tpl():    context = {        'users': ['小明', '小李', '小花'],        'txt': Markup("
    ") } return render_template('tpl.html', **context)

    全局模板函数装饰器

    通过 @app.template_global() 装饰器可以定义全局模板函数。以下是一个简单的实现:

    @app.template_global()def global_template_func(a, b):    return a + b

    session

    Flask 的 session 会话存储在客户端的 cookie 中,支持临时存储和取回数据。以下是一个简单的使用示例:

    @app.route('/page1')def page1():    flash('存储临时数据')    return "Session"@app.route('/page2')def page2():    flash_msg = get_flashed_messages()    return flash_msg

    中间件

    Flask 中间件通过自定义类实现,可以在请求处理过程中添加额外的逻辑。以下是一个简单的中间件实现:

    class Middleware(object):    def __init__(self, origin_wsgi_app):        self.origin_wsgi_app = origin_wsgi_app    def __call__(self, *args, **kwargs):        ret = self.origin_wsgi_app(*args, **kwargs)        return ret

    特殊的装饰器

    @app.before_request

    @app.before_request 装饰器可以用来在每个请求之前执行自定义逻辑。以下是一个简单的实现:

    @app.before_requestdef auth():    print('请先登录!')

    @app.after_request

    @app.after_request 装饰器可以用来在每个请求之后执行自定义逻辑。以下是一个简单的实现:

    @app.after_requestdef after(response):    print('请求已经得到响应!')    return response

    通过这些功能,Flask 提供了一个强大而灵活的框架,能够满足各种 Web 应用开发需求。

    转载地址:http://eunuz.baihongyu.com/

    你可能感兴趣的文章
    Openlayers实战:绘制带箭头的线
    查看>>
    Openlayers实战:输入WKT数据,输出GML、Polyline、GeoJSON格式数据
    查看>>
    Openlayers实战:非4326,3857的投影
    查看>>
    Openlayers高级交互(10/20):绘制矩形,截取对应部分的地图并保存
    查看>>
    Openlayers高级交互(11/20):显示带箭头的线段轨迹,箭头居中
    查看>>
    Openlayers高级交互(13/20):选择左右两部分的地图内容,横向卷帘
    查看>>
    Openlayers高级交互(14/20):汽车移动轨迹动画(开始、暂停、结束)
    查看>>
    Openlayers高级交互(15/20):显示海量多边形,10ms加载完成
    查看>>
    Openlayers高级交互(16/20):两个多边形的交集、差集、并集处理
    查看>>
    Openlayers高级交互(17/20):通过坐标显示多边形,计算出最大幅宽
    查看>>
    Openlayers高级交互(18/20):根据feature,将图形适配到最可视化窗口
    查看>>
    Openlayers高级交互(19/20): 地图上点击某处,列表中显示对应位置
    查看>>
    Openlayers高级交互(2/20):清除所有图层的有效方法
    查看>>
    Openlayers高级交互(20/20):超级数据聚合,页面不再混乱
    查看>>
    Openlayers高级交互(3/20):动态添加 layer 到 layerGroup,并动态删除
    查看>>
    Openlayers高级交互(4/20):手绘多边形,导出KML文件,可以自定义name和style
    查看>>
    Openlayers高级交互(5/20):右键点击,获取该点下多个图层的feature信息
    查看>>
    Openlayers高级交互(6/20):绘制某点,判断它是否在一个电子围栏内
    查看>>
    Openlayers高级交互(7/20):点击某点弹出窗口,自动播放视频
    查看>>
    Openlayers高级交互(8/20):选取feature,平移feature
    查看>>