安装环境:

centos 6.3

python2.6

使用easy_install安装方式:

[root@localhost ~]# easy_install flask

简单的hello

from flask import Flask

app = Flask(__name__)

@app.route("/")

def hello():

return "Hello World!"

if __name__ == "__main__":

app.run()

运行:

[root@localhost flask]# python hello.py

* Running on http://127.0.0.1:5000/

在浏览器中打开 http://127.0.0.1:5000/ ,就 可以看到问候页面了。

from flask import Flask

导入Flask类

app = Flask(__name__)

实例化对象app,参数为应用模块或包的名称,这里__name__指的是__main__主程序。这个参数是必需的,这样 Flask 就可以知道在哪里找

到模板和静态文件等东西。

@app.route("/")

使用route()装饰器告诉Flask触发函数的URL。

def hello():

return "Hello World!"

定义的函数,用来生成相关联的URL,并返回需要在用户浏览器中显示的信息。

app.run()

运行服务器应用,运行后默认只有本地可以访问,如需让其他连接,可以指定host,如:app.run(host='0.0.0.0')

默认使用的端口是:5000,可以使用自定义的端口:app.run(host="0.0.0.0",port=8000)

调试模式:

打开调试模式后,服务器会在修改应用之后自动重启,并且当应用出错时还会提供一个有用的调试器;

打开调试模式有两种方法:

1.在应用对象上设置标志

app.debug = True

app.run()

2.作为参数传递给 run 方法:

app.run(debug=True)

路由:

route()装饰器把一个函数绑定到一个URL,用户在浏览器输入相关的URl后,会得到相应的函数返回。

from flask import Flask

app = Flask(__name__)

@app.route('/')

def index():

return 'Index Page'

@app.route('/hello')

def hello():

return 'Hello World'

if __name__ == "__main__":

app.debug = True

app.run(host="0.0.0.0",port=8000)

在浏览器用直接访问显示Index Page,后URL后面加/hello显示Hello World.

变量规则:

通过把URl一部分标记为 <variable_name>就可以在URL中添加变量。标记的部分作为关键字参数传递给函数。通过使用

<converter:variable_name>,可以选择性的加上一个转换器,为变量指定规则。

例:

from flask import Flask

app = Flask(__name__)

@app.route('/user/<username>')

def show_user_profile(username):

return 'User %s' % username

@app.route('/post/<int:postid>')

def show_post(post_id):

return 'Post %d' % post_id

if __name__ == "__main__":

app.run(host='0.0.0.0')

其中int是为转换器,接受整数。

URL 构建

url_for()函数用于构建指定的函数URL的。它把函数名称作为第一个参数,其余参数对应URL中的变量。未知变量将添加到URL中查询参数。

from flask import Flask, url_for

app = Flask(__name__)

@app.route('/')

def index():

pass

@app.route('/login')

def login():

pass

@app.route('/user/<username>')

def profile(username):

pass

with app.test_request_context():

print url_for('index')

print url_for('login')

print url_for('login', next='/')

print url_for('profile', username='John Doe')

输出:

/

/login

/login?next=%2F

/user/John%20Doe

test_request_context()方法的作用是告诉Flask我们正在处理一个请求,这里处于python 执行下,并没有真正请求。

不把URL写死在模板而用动态构建的三个理由:

1.反向解析通常比硬编码URL更直观。同时,更重要的是你可以只在一个地方改变URL,而不用到处找。

2.URL创建会为你处理特殊字符转义和Unicode数据,不用你操心。

3.如果你的应用是放在URL根路径之外的地方(如在/myapplication中,不在/中),url_for会为你妥善处理。

HTTP 方法

默认情况下一个路由只回应GET请求,但是可能通过methods参数使用不同方法。

例:

@app.route('/login', methods=['GET', 'POST'])

def login():

if request.method == 'POST':

do_the_login()

else:

show_the_login_form()

静态文件

在开发过程中, Flask 也能做好这个 工作。只要在你的包或模块旁边创建一个名为 static 的文件夹就行了。静态文件位于 应用的

/static 中。

使用选定的'static' 端点就可以生成相应URL:

url_for('static',filename='style.css')

这个静态文件在文件系统中的位置应该是static/style.css。

渲染模板

使用render_template()方法渲染模板,你只要提供模板名称和需要作用参数传递给模板的变量就行了。

例:

Flask会有templates文件夹内寻找模板。因此,如果你的应用是一个模块,寻么模板文件夹应该在模块旁边;如果是一个包,那么就应该在包里面:

1.application.py

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/hello')

@app.route('hello/<name>')

def hello(name=None):

return render_template('hello.html', name = name)

if __name__ == "__main__:"

app.run(host='0.0.0.0')

2.建立templates

mkdir templates

3.在templates目录下建立hello.html

<!doctype html>

<html>

<head>

<title>Hello from Flask</title>

</head>

<body>

{% if name %}

<h1>Hello {{name}}! </h1>

{% else %}

<h1>Hello World! </h1>

{% endif %}

</body>

</html>

测试:

自动转义默认开启。因此,如果 name包含HTML,那么会被自动转义。如果可以信任某个变量,且知道它是安全的HTML,那么可以使用Markup类把它标记为安全的。否则请在模板中使用|safe过滤器。

>>> from flask import Markup

>>> Markup('<strong>Hello %s!</strong>') % '<blink>hacker</blink>'

Markup(u'<strong>Hello <blink>hacker</blink>!</strong>')

>>> Markup.escape('<blink>hacker</blink>')

Markup(u'<blink>hacker</blink>')

>>> Markup('<em>Marked up</em> » HTML').striptags()

u'Marked up \xbb HTML'

文件上传:

确保HTML表单中设置了enctype=”multipart/form-data”属性。否则浏览器不会传送文件。

已上传的文件被储存在内存或文件系统的临时位置。可以通过对象files属性来访问上传的文件。每个上传的文件都储存在这个字典属性中,这个属性基本和标准的python file对象一样,另外多出一个用于用上传的文件保存到服务器的文件系统中。

from flask import request

@app.route('/upload', methods=['GET', 'POST'])

def upload_file():

if request.method == 'POST':

f = request.files['the_file']

f.save('/var/www/uploads/uploaded_file.txt')

cookies

读取

username = request.cookies.get('username')

设置

resp.set_cookie('username', 'the username')

重定向和错误

from flask import abort, redirect, url_for

@app.route('/')

def index():

return redirect(url_for('login'))

@app.route('/login')

def login():

abort(401)

this_is_never_executed()

flask学习的更多相关文章

  1. [ZHUAN]Flask学习记录之Flask-SQLAlchemy

    From: http://www.cnblogs.com/agmcs/p/4445583.html 各种查询方式:http://www.360doc.com/content/12/0608/11/93 ...

  2. Flask 学习目录

    Flask 学习目录 Flask 的学习过程是一个了解如何从单个模块搭建一个 Web 框架的过程. Python.Flask 的安装和设置 简单的 Hello World 程序 使用 Jinjia2 ...

  3. Python Flask学习笔记之模板

    Python Flask学习笔记之模板 Jinja2模板引擎 默认情况下,Flask在程序文件夹中的templates子文件夹中寻找模板.Flask提供的render_template函数把Jinja ...

  4. Python Flask学习笔记之Hello World

    Python Flask学习笔记之Hello World 安装virtualenv,配置Flask开发环境 virtualenv 虚拟环境是Python解释器的一个私有副本,在这个环境中可以安装私有包 ...

  5. Flask学习-Wsgiref库

    一.前言 前面在Flask学习-Flask基础之WSGI中提到了WerkZeug,我们知道,WerkZeug是一个支持WSGI协议的Server,其实还有很多其他支持WSGI协议的Server.htt ...

  6. Flask 学习篇二:学习Flask过程中的记录

    Flask学习笔记: GitHub上面的Flask实践项目 https://github.com/SilentCC/FlaskWeb 1.Application and Request Context ...

  7. Flask 学习(四)静态文件

    Flask 学习(四)静态文件 动态 web 应用也需要静态文件,一般是 CSS 和 JavaScript 文件.理想情况下你的服务器已经配置好提供静态文件的服务. 在开发过程中, Flask 也能做 ...

  8. Flask 学习(三)模板

    Flask 学习(三)模板 Flask 为你配置 Jinja2 模板引擎.使用 render_template() 方法可以渲染模板,只需提供模板名称和需要作为参数传递给模板的变量就可简单执行. 至于 ...

  9. Flask 学习(一)概述及安装

    Flask 概述及安装 Flask 简介 Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 . 官方网址 ...

  10. Flask学习目录

    目录 Flask学习初识 Flask学习二

随机推荐

  1. WebsitePanel 2.1.0beta配置部分

    到http://www.websitepanel.net/downloads/下载好单独安装包作为网站内容运行在IIS7.0上,配置applicationpool为localsystem Websit ...

  2. xml是什么?

    xml Extensible Markup Language 可扩展标记语言 它被设计用来传输和存储数据. 它的内容都是由标签组成,非常有规律.

  3. Flash图表控件FusionCharts自定义图表y轴最大/最小值

    自定义图表y轴的最大值和最小值 用户可以使用FusionCharts图表中<chart>元素的yAxisMaxValue和yAxisMinValue属性设置图表限制. 示例: <ch ...

  4. 慕课网-安卓工程师初养成-3-8 Java中的条件运算符

    来源:http://www.imooc.com/code/1306 条件运算符( ? : )也称为 “三元运算符”. 语法形式:布尔表达式 ? 表达式1 :表达式2 运算过程:如果布尔表达式的值为 t ...

  5. 慕课网-安卓工程师初养成-2-5 如何命名Java变量

    来源:http://www.imooc.com/code/1221 如同酒店会给每个房间起个性化的名字一样,程序中的变量也需要用合理的名字进行管理---变量名! 需要注意,给酒店房间起名字时可以是数字 ...

  6. xml 和 json 的区别

    JSON(Javascript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于Javascript Programming Langu ...

  7. Alfresco安装与配置图解

    Alfresco安装与配置图解 Alfresco是一款开源的企业内容管理系统(ECM),为企业提供了日常的文档管理.工作流(可以和企业目前的OA协同接合使用).工作记录管理.知识管理.网络内容管理.图 ...

  8. 【ITOO 1】将List数据导出Excel表

    需求描述:在课表导入的时候,首先给用户提供模板(excel),然后将用户填写好的数据读取到list集合中.再进行判空处赋值处理,以及去重处理.这篇博客,主要介绍读取excel表和导出excel表的方法 ...

  9. a different object with the same identifier value was already associat

    问题:这个著名的托管态update更新异常 org.hibernate.NonUniqueObjectException: a different object with the same ident ...

  10. nagios架构及windows,linux客户端配置

    Linux下Nagios的安装与配置 一.Nagios简介 Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等. ...