安装环境:

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. 翻译:Knockout 快速上手 - 3: knockoutJS 快速上手

    许多时候,学会一种技术的有效方式就是使用它解决实际中的问题.在这一节,我们将学习使用 Knockout 来创建一个常见的应用,库存管理应用. 应用概览 在创建我们的应用之前,我们需要一个公司,来理解应 ...

  2. 联系博主(推介联系QQ)

    李莫,OI 蒟蒻一只 QQ:740929894 邮箱:12958954@163.com limo740929894@gmail.com (目测国外网站的邮件发不进网易邮箱,所以注册了个Gmail,但是 ...

  3. 传智Java基础知识测试

    共40道选择题,每题2.5分.多选题有错则全错,全对才满分. 单选题: 1.   下列哪个声明是错误的?(B) A.  int  i=10; B.  float  f=1.1; C.  double  ...

  4. Android开发-API指南-<intent-filter>

    <intent-filter> 英文原文:http://developer.android.com/guide/topics/manifest/intent-filter-element. ...

  5. HTML5中querySelector()和querySelectorAll()

    HTML5向Web API新引入了document.querySelector以及document.querySelectorAll两个方法用来更方便地从DOM选取元素,功能类似于jQuery的选择器 ...

  6. NOIP2007 守望者的逃离-DP

    https://vijos.org/p/1431 描述 恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变.守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上.为了杀死守 ...

  7. 学习总结 java 异常

    package com.hanqi.ec; public class Test1 { public static void main(String[] args) { int a = 10 , b = ...

  8. 连接器|网络滤波连接器|电脑连接器|RJ45变压器-华联威电子有限公司

    连接器|网络滤波连接器|电脑连接器|RJ45变压器-华联威电子有限公司  

  9. 深入了解Qt(二)之元对象系统(Meta-Object System)

    深入了解Qt主要内容来源于Inside Qt系列,本文做了部分删改,以便于理解.在此向原作者表示感谢! 在Qt Meta Object System-元对象系统这篇文章中,从底层实现的源码剖析了元对象 ...

  10. Volume serial number could associate file existence on certain volume

    When it comes to lnk file analysis, we should put more emphasis on the volume serial number. It coul ...