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. 2018.12.17 ural1132 Square Root(二次剩余)

    传送门 MD写一道二次剩余的板题差点写自闭了. 我用的是cipollacipollacipolla算法. 利用的是欧拉准则来找寻一个二次非剩余类来求根. 注意这题有两个等根和模数为2的情况. 代码: ...

  2. 2018.10.31 NOIP模拟 一串数字(数论+贪心)

    传送门 把每一个数aaa质因数分解. 假设a=p1a1∗p2a2∗...∗pkaka=p_1^{a_1}*p_2^{a_2}*...*p_k^{a_k}a=p1a1​​∗p2a2​​∗...∗pkak ...

  3. Docker学习以及镜像制作流程

    一.何为Docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后 ...

  4. 不同数据源之间的数据同步jdbc解决方案

    最近项目中用到的数据要从一个数据源获取存进另一个数据源,简单的jdbc解决方案. package com.sh.ideal.test.syns; import java.sql.Connection; ...

  5. centos7,系统目录结构

    LINUX有四种基本文件系统类型 普通文件: 如文本文件.C语言元代码.SHELL脚本.二进制的可执行文件等,可用cat.less.more.vi.emacs来察看内容,用mv来改名. 目录文件: 包 ...

  6. WordPaster2产品介绍

    更新WordParser组件,集成ImagePaster组件功能.完善粘贴剪帖板图片,粘贴电脑图片文件,粘贴word,粘贴excel逻辑. 大幅度优化和精简js代码,js代码行数从1932行减少到97 ...

  7. 2018-03-17 handler学习使用

    1.handler具体使用https://www.cnblogs.com/JohnTsai/p/5259869.html 2.handlerThread用法https://www.jianshu.co ...

  8. 用css写出下拉框(代码转自wq群)

    做网易云音乐首页时遇到的问题,鼠标指在右上角头像时出现下拉框. <style>/* css*/ #body{ float: left; } #xialakuang{ background- ...

  9. ES版本控制

    版本控制 ElasticSearch采用了乐观锁来保证数据的一致性,也就是说,当用户对document进行操作时,并不需要对该doucument作加锁和解锁的操作,只需要指定要操作的版本即可.当版本号 ...

  10. python函数知识

    一.三目运算 也叫三元运算,例如result=x if x<y else y 二.集合(set) 返回主页集合(set):把不同的元素组成一起形成集合,是python基本的数据类型.集合元素(s ...