flask学习
安装环境:
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学习的更多相关文章
- [ZHUAN]Flask学习记录之Flask-SQLAlchemy
From: http://www.cnblogs.com/agmcs/p/4445583.html 各种查询方式:http://www.360doc.com/content/12/0608/11/93 ...
- Flask 学习目录
Flask 学习目录 Flask 的学习过程是一个了解如何从单个模块搭建一个 Web 框架的过程. Python.Flask 的安装和设置 简单的 Hello World 程序 使用 Jinjia2 ...
- Python Flask学习笔记之模板
Python Flask学习笔记之模板 Jinja2模板引擎 默认情况下,Flask在程序文件夹中的templates子文件夹中寻找模板.Flask提供的render_template函数把Jinja ...
- Python Flask学习笔记之Hello World
Python Flask学习笔记之Hello World 安装virtualenv,配置Flask开发环境 virtualenv 虚拟环境是Python解释器的一个私有副本,在这个环境中可以安装私有包 ...
- Flask学习-Wsgiref库
一.前言 前面在Flask学习-Flask基础之WSGI中提到了WerkZeug,我们知道,WerkZeug是一个支持WSGI协议的Server,其实还有很多其他支持WSGI协议的Server.htt ...
- Flask 学习篇二:学习Flask过程中的记录
Flask学习笔记: GitHub上面的Flask实践项目 https://github.com/SilentCC/FlaskWeb 1.Application and Request Context ...
- Flask 学习(四)静态文件
Flask 学习(四)静态文件 动态 web 应用也需要静态文件,一般是 CSS 和 JavaScript 文件.理想情况下你的服务器已经配置好提供静态文件的服务. 在开发过程中, Flask 也能做 ...
- Flask 学习(三)模板
Flask 学习(三)模板 Flask 为你配置 Jinja2 模板引擎.使用 render_template() 方法可以渲染模板,只需提供模板名称和需要作为参数传递给模板的变量就可简单执行. 至于 ...
- Flask 学习(一)概述及安装
Flask 概述及安装 Flask 简介 Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 . 官方网址 ...
- Flask学习目录
目录 Flask学习初识 Flask学习二
随机推荐
- A手机等的网络udp广播,收到广播以后回复udp消息
B手机:向A手机发送一条消息,等待A回复 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: ...
- OC基础(10)
id类型 SEL类型 *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !im ...
- Redis数据持久化之AOF持久化
一.RDB持久化的缺点创建RDB文件需要将服务器所有的数据库的数据都保存起来,这是一个非常耗费资源和时间的操作,所以服务器需要隔一段时间才能创建一个新的RDB文件,就也是说创建RDB文件的操作不能执行 ...
- QQ音乐无损歌曲接口api
1.打开QQ音乐官网 y.qq.com 2.选择你要的歌曲,进入后查看网址,以虎口脱险这个歌曲为例:http://y.qq.com/#type=song&mid=000Ib8E71sUNi7 ...
- 仅显示INPUT下边框
最近在倒腾前端的页面,在某次的需求中我想要这样的一个效果——仅显示INPUT输入框的下边框,和我想象的编写方式不一致,每个标签都有其对应的默认样式,不同的浏览器也有其不同的渲染方式,当然这些知识现在我 ...
- 学习记录 java 值类型和引用类型的知识
1. Java中值类型和引用类型的不同? [定义] 引用类型表示你操作的数据是同一个,也就是说当你传一个参数给另一个方法时,你在另一个方法中改变这个变量的值, 那么调用这个方法是传入的变量的值也将改变 ...
- MongoDB 3: 使用中的问题,及其应用场景
导读:用MongoDB去存储非关系型的数据,是一个比较正确的选择.但是,如果只是用MongoDB,那么也会出现一些问题.MongoDB,尤其使用的最佳场景,更多的时候,需要结合关系型数据库共同解决问题 ...
- Freebsd下压缩解压文件详解
压缩篇: 把/usr/webgames目录下的文件打包.命名为bak.tar.gz 放到/usr/db-bak目录里 下面命令可以在任意目录执行.无视当前目录和将要存放文件的目录.tar -zcvf ...
- cacti快速安装
一.cacti概述 1. cacti是用php语言实现的一个软件,它的主要功能是用snmp服务获取数据,然后用rrdtool储存和更新数据,当用户需要查看数据的时候用rrdtool生成图表呈现给用户. ...
- JS常用的设计模式(15)—— 职责链模式
职责链模式是一个对象A向另一个对象B发起请求,如果B不处理,可以把请求转给C,如果C不处理,又可以把请求转给D.一直到有一个对象愿意处理这个请求为止. 打个比方,客户让老板写个php程序.老板肯定不写 ...