安装环境:

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. unique踢出相同元素

    unique函数的功能是:去除相邻的重复元素(只保留一个). 函数参数:unique(first,last,compare); //first为容器的首迭代器,last为容器的末迭代器,compare ...

  2. MFC学习 修改窗口样式

    1. 在PreCreateWindow中可用CREATESTRUCT cs, cs.lpszName修改窗口标题, cs.lpszClass = AfxRegisterWndClass 修改图标与样式 ...

  3. (Loadrunner)Error: Failed to send data by channels - post message failed.(转)

    把Diagnotics-configure-Web Page Diagnotics 设置为 转自: http://www.51testing.com/html/64/371664-3708254.ht ...

  4. 多媒体编程基础之RGB和YUV

    一.概念 1.什么是RGB? 对一种颜色进行编码的方法统称为“颜色空间”或“色域”.用最简单的话说,世界上任何一种颜色的“颜色空间”都可定义成一个固定的数字或变量.RGB(红.绿.蓝)只是众多颜色空间 ...

  5. Effective Modern C++翻译(3)-条款2:明白auto类型推导

    条款2 明白auto类型推导 如果你已经读完了条款1中有关模板类型推导的内容,那么你几乎已经知道了所有关于auto类型推导的事情,因为除了一个古怪的例外,auto的类型推导规则和模板的类型推导规则是一 ...

  6. Hello world!让 grub2 引导自己的操作系统 Xos 内核

    按照惯例,Xos 的第一步是在屏幕上打印 Hello world!第一步是神奇的一步,如果读者对 PC 不了解,将很难得到头绪. PC 开机后,CS 和 IP 被初始化为 CS=0xFFFFh,IP= ...

  7. Exercises - Kangaroo

    Write a definition for a class named Kangaroo with the following methods: An __init__ method that in ...

  8. multi2sim,booksim简介

    booksim是周期精确互连网络仿真器,设计用来配合"Principles and Practices of Interconnection Networks"课程教学,仿真器采用 ...

  9. 区间k大数查询

    问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列长度. 第二行包含n个正整数,表示给定的序列. 第三个包含一个正整数m,表示询问个数 ...

  10. CODEVS 1036 商务旅行

    题目描述 Description 某首都城市的商人要经常到各城镇去做生意,他们按自己的路线去做,目的是为了更好的节约时间. 假设有N个城镇,首都编号为1,商人从首都出发,其他各城镇之间都有道路连接,任 ...