Flask 出生于2010年,集中了其他python web框架的长处,定位于微小项目上。

特点

1 内置开发服务器和调试器

2 于Python单元测试功能无缝衔接

  Flask框架提供了一个与Python自带的单元测试框架unitest无缝衔接的测试接口,

  即Flask对象的test_client函数,测试程序可以模拟进行HTTP访问的客户端来调用

Flask路由处理函数,并且获取函数的输出来进行自定义的验证。

3 使用Jinja2模板

4 完全兼容WSGI 1.0标准

5 基于Unicode 编码

  默认情况下,Flask框架自动添加一个UTF-8编码格式的HTTP Head。

环境搭建

1 安装Flask

pip install Flask

2 安装SQLALchemy

pip install SQLAlchemy

3 安装Flask-WTForm

WTForm 是一个简化HTML表单处理的Python库,而Flask-WTForm提供了

对它的简单封装

pip install Flask-WTF

Hello World 入门

#!/usr/bin/env python
# coding: utf-8 from flask import Flask
app = Flask(__name__) @app.route('/')
def hello_world():
return 'Hello, World!' if __name__ == '__main__':
app.run()

这里说一下Flask框架的特色:

1 app = Flask(__name__)

这是实例化了一个Flask类的实例,作用:把应用模块或包的名字传给Flask构造函数的第一个参数,

Flask在运行过程中将使用这个参数作为定位模板和其他静态文件的基础

2 route 装饰器

以下是Flask 源码

In [7]: Flask.route??
Signature: Flask.route(self, rule, **options)
Source:
def route(self, rule, **options):
"""A decorator that is used to register a view function for a
given URL rule. This does the same thing as :meth:`add_url_rule`
but is intended for decorator usage:: @app.route('/')
def index():
return 'Hello World' For more information refer to :ref:`url-route-registrations`. :param rule: the URL rule as string
:param endpoint: the endpoint for the registered URL rule. Flask
itself assumes the name of the view function as
endpoint
:param options: the options to be forwarded to the underlying
:class:`~werkzeug.routing.Rule` object. A change
to Werkzeug is handling of method options. methods
is a list of methods this rule should be limited
to (`GET`, `POST` etc.). By default a rule
just listens for `GET` (and implicitly `HEAD`).
Starting with Flask 0.6, `OPTIONS` is implicitly
added and handled by the standard request handling.
"""
def decorator(f):
endpoint = options.pop('endpoint', None)
self.add_url_rule(rule, endpoint, f, **options)
return f
return decorator

通过装饰器,我们将路由和其相应的处理函数绑定在一起。除了直接传url作为第一个参数,我们还能通过methods参数,绑定更多的访问方式。

如 @app.route('/thisisurl',methods=['POST'])。通过阅读route的docstring‘

 By default a rule
just listens for `GET` (and implicitly `HEAD`).
Starting with Flask 0.6, `OPTIONS` is implicitly
added and handled by the standard request handling.

我们可以知道 当GET方式指定时,HEAD方式也被追加到该装饰器中;Flask 0.6以后的版本,options访问方式被追加到所有装饰器。

其他特性

1 路由反向生成

  Flask 提供了flask.url_for()函数获取http请求函数通过app.route绑定的url。

2 Context上下文

  web编程中将服务器端获得应用及请求相关信息的对象称作上下文

2.1 会话上下文

  会话上下文是Web服务器上基于Cookie的对象,它提供了同一个客户端在多次请求之间共享信息的方式

Flask框架通过flask.session对象操作会话。这是要特别说一下,flask的会话是通过Cookie实现的,这是的session和web前端一个标签就是

一个session有区别。

class LocalProxy(__builtin__.object)
| Acts as a proxy for a werkzeug local. Forwards all operations to
| a proxied object. The only operations not supported for forwarding
| are right handed operands and any kind of assignment.
|
| Example usage::
|
| from werkzeug.local import Local
| l = Local()
|
| # these are proxies
| request = l('request')
| user = l('user')
|
|
| from werkzeug.local import LocalStack
| _response_local = LocalStack()
|
| # this is a proxy
| response = _response_local()
|
| Whenever something is bound to l.user / l.request the proxy objects
| will forward all operations. If no object is bound a :exc:`RuntimeError`
| will be raised.
|
| To create proxies to :class:`Local` or :class:`LocalStack` objects,
| call the object as shown above. If you want to have a proxy to an
| object looked up by a function, you can (as of Werkzeug 0.6.1) pass
| a function to the :class:`LocalProxy` constructor::
|
| session = LocalProxy(lambda: get_current_request().session)
|
| .. versionchanged:: 0.6.1
| The class can be instanciated with a callable as well now.
|

  以上是help(flask.session)的说明,这里Flask框架采用特别机制,使得flask.session对象只有在请求的处理环境中才能被调用。

给个例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*- from flask import Flask, session
from datetime import datetime app = Flask(__name__) app.secret_key = 'SET_ME_BEFORE_USE_SESSION' @app.route('/write_session')
def writeSession():
session['key_time']= datetime.now().strftime('%Y-%m-%d %H:%M:%S') #将当前时间保存在Session中
return session['key_time'] #返回当前时间 @app.route('/read_session')
def readSession():
return session.get('key_time') #获得上次调用writeSession时写入的时间,并返回 if __name__ == '__main__':
app.run()

2.2 应用全局对象

  应用全局对象提供了在一次请求的多个处理函数中共享信息的方式。在Flask中每个请求可能会触发多个相应函数,而如果想在多个响应

  函数之间共享数据,则需要用到应用全局对象(Application Global)。应用全局对象是Flask为每个请求自动建立的一个对象。相对于简单的

  全局对象,应用全局对象可以保证线程安全。

  flask框架使用flask.g实现上述功能。

2.3 请求上下文

  是web服务器管理单次用户请求的环境对象,用于处理客户端向Web服务器发送的数据。请求上下文主要是在服务器端获得从客户端提交的

  数据。这些数据包括:URL参数,Form表单数据,Cookie,HTML头信息,URL等。flask框架通过Request对象实现。

2.4 回调接入点

  Flask提供了before_request,after_request,teardown_request等装饰器,为所有flask app实例的handler提供共同的处理逻辑。

  before_request:每个请求都会在被处理之前先执行本接入点,可定义多个before_request。一旦一个before_request返回Response,则对应的url

  处理函数不会调用,flask直接将Response返回给客户端。

  after_request:在每个请求的URL处理函数被调用之后调用本接入点

  teardown_request:在每个请求的URL处理函数被调用之后调用。即使之前的处理函数发生异常,也会调用吗,适合异常处理。

Flask 初印象的更多相关文章

  1. Vue.js之初印象

    一.背景 MVVM模式,很多人在说在用,好吧,我落后了,我目前的项目木有用到MVVM模式的框架,vuejs,reactjs,angularjs,nonono,自己去捣鼓过ng,项目木有用到.实在不敢称 ...

  2. Django初印象之视图(view)

    一.view的初印象 一个视图函数(类),简称视图.我们发起web请求时,返回的web响应.[大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中.] ...

  3. 初印象至Vue路由

    初印象系列为快速了解一门技术的内容,后续会推出本人应用这门技术时发现的一些认识. Vue路由和传统路由的区别: Vue路由主要是用来实现单页面应用内各个组件之间的切换,同样支持传递参数等功能.而传统路 ...

  4. OpenCL学习笔记(一):摩尔定律,异构计算与OpenCL初印象

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld.  技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 关于摩尔定律: 摩尔定律19 ...

  5. [强化学习]Part1:强化学习初印象

    引入 智能 人工智能 强化学习初印象 强化学习的相关资料 经典书籍推荐:<Reinforcement Learning:An Introduction(强化学习导论)>(强化学习教父Ric ...

  6. Three 之 Animation 初印象

    Animation 初印象 动画效果 播放动画需要基本元素 AnimationMixer 一个对象所有动作的管理者 用于场景中特定对象的动画的播放器.一个对象可能有多个动作,Mixer 是用来管理所有 ...

  7. python框架之Flask(1)-Flask初使用

    Flask是一个基于 Python 开发并且依赖 jinja2 模板和 Werkzeug WSGI 服务的一个微型框架,对于 Werkzeug 本质是 Socket 服务端,其用于接收 http 请求 ...

  8. [置顶] Retrofit2 初印象?

    鄙人由于工作繁忙很久没写博客了还望大家谅解!之前csdn登不上,算了不说借口了,retrofit2相信已经很火了吧,而且上手也比较容易,之前可能大家都是用Volley,Okhttp.Okhttp3其实 ...

  9. AngularJS 初印象------对比 Asp.net MVC

    之前就早耳闻前端MVC的一些框架,微软自家的Knockout.js,google家的AngularJs,还有Backone.但未曾了解,也不解为什么前端也要这么分.这两天看了AngularJs的官方教 ...

随机推荐

  1. mysql知识积累

    验证mysql工作状态 systemctl status mysql.service 启动 sudo systemctl start mysql 停止 service mysql stop 重启mys ...

  2. 第15章:MongoDB-聚合操作--聚合管道--$match

    ①$match 用于对文档集合进行筛选,里面可以使用所有常规的查询操作符. 通常会放置在管道最前面的位置,理由如下: 1:快速将不需要的文档过滤,减少后续操作的数据量 2:在投影和分组之前做筛选,查询 ...

  3. web项目文件夹上传

    最近公司做工程项目,实现文件夹上传 网上找了很久,发现网上很多代码大都存在很多问题,不过还是让我找到了一个符合要求的项目. 对项目的文件夹上传功能做出分析,找出文件夹上传的原理,对文件夹的传输模式深入 ...

  4. Zookeeper C++编程实战之主备切换

    默认zookeeper日志输出到stderr,可以调用zoo_set_log_stream(FILE*)设置输出到文件中还可以调用zoo_set_debug_level(ZooLogLevel)控制日 ...

  5. Write Markdown Syntax Online Document with Sphinx and Pandoc

    There is no doubt that we have to write doc while we are developing software. But How do you write d ...

  6. MapGIS SDK(C++)【基础篇】

    算法测试:Demo.Test https://www.cnblogs.com/2008nmj/p/10060847.html //例1-1 简单要素 void AppendSFeature(CSFea ...

  7. linux 个人配置记录

    一.防火墙操作 1) 重启后生效 开启: chkconfig iptables on 关闭: chkconfig iptables off 2) 即时生效,重启后失效 开启: service ipta ...

  8. (01背包)Buy the souvenirs (hdu 2126)

    http://acm.hdu.edu.cn/showproblem.php?pid=2126 Buy the souvenirs Time Limit: 10000/1000 MS (Java/Oth ...

  9. 去除html页面中GET《 http://localhost:8080/favicon.ico 404 (Not Found)》

    html5页面中经常会遇见以下问题,总是看着碍眼,那么怎么解决呢? GET http://localhost:8080/favicon.ico 404 (Not Found) 解决的方法: <l ...

  10. dropzone 上传插件

    dropzone dropzone.js是一个可预览的上传文件工具,不依赖任何框架(如jQuery),且具有可定制化.实现文件拖拽上传,提供AJAX异步上传功能. 1. html文件 dropzone ...