Flask 快速学习笔记
Flask 快速学习笔记
学习原因
因项目需要自动化处理大量mysql数据,考虑后期,展示页面,进行快速的数据分析。
环境
-
安装条件
安装Flask通常需要Python 2.6或更高版本。虽然Flask及其依赖项适用于Python 3(Python 3.3以上版本),但是许多Flask扩展不能正确支持它。因此,建议在Python 2.7上安装Flask。
-
windows
python -m pip install Flask
-
linux
sudo apt-get install virtualenv #为了创建虚拟环境 pip install Flask
应用
-
demo
from flask import Flask app = Flask(__name__) @app.route('/') #route 为装饰器,告诉程序 URL应该调用哪个函数 #app.route(url,options) # url 该函数绑定的url # options 转发参数列表 def hello_world(): return 'Hello 0xdd’ if __name__ == '__main__': app.run()
-
app.run
app.run(host, port, debug, options)
#options 要转发到底层的Werkzeug服务器。
- debug
app.debug = True
app.run()
app.run(debug = True)
# 为什么要开DEBUG模式
# 通过调用run()方法启动Flask应用程序。但是,当应用程序正在开发中时,应该为代码中的每个更改手动重新启动它。为避免这种不便
路由
-
绑定方式1
@app.route(‘/hello’) def hello_world(): return ‘hello world’ example: URL: http://127.0.0.1/hello # 访问URL执行hello_word函数
-
绑定方式2
def hello_world(): return ‘hello world’ app.add_url_rule(‘/’, ‘hello’, hello_world)
变量规则
-
demo1
from flask import Flask app = Flask(__name__) @app.route('/hello/<name>') def hello_name(name): return 'Hello %s!' % name if __name__ == '__main__': app.run(debug = True) example: URL: http://127.0.0.1/hello/0xdd # 访问URL执行hello_name函数 #resualt: Hello 0xdd
-
demo2
#转换器构建规则 int float path 默认为子覅穿变量 from flask import Flask app = Flask(__name__) @app.route('/blog/<int:postID>') #int 转换 def show_blog(postID): return 'Blog Number %d' % postID @app.route('/rev/<float:revNo>') #float 转换 def revision(revNo): return 'Revision Number %f' % revNo if __name__ == '__main__': app.run()
Flask的URL规则基于Werkzeug的路由模块。这确保形成的URL是唯一的,并且基于Apache规定的先例。
URL构建
-
url_for 函数对于动态构建特定函数的URL非常有用。该函数接受函数的名称作为第一个参数,以及一个或多个关键字参数,每个参数对应于URL的变量部分。
-
demo1
from flask import Flask, redirect, url_for #redirect 重定向 url_for 动态函数调用,传参。 app = Flask(__name__) @app.route('/admin') def hello_admin(): return 'Hello Admin' @app.route('/guest/<guest>') def hello_guest(guest): return 'Hello %s as Guest' % guest @app.route('/user/<name>') def hello_user(name): if name =='admin': #通过用户名 进行权限判断 分类 return redirect(url_for('hello_admin')) #权限为admin,进行重定向跳转到指定函数 else: return redirect(url_for('hello_guest',guest = name)) #guest为hello_guest 接收值,传参名需保持与接收参数名相同 if __name__ == '__main__': app.run(debug = True)
HTTP方法
-
http 方法
1. GET #以未加密的形式将数据发送到服务器。最常见的方法。 2. HEAD #和GET方法相同,但没有响应体。 3. POST #用于将HTML表单数据发送到服务器。POST方法接收的数据不由服务器缓存。 4. PUT #用上传的内容替换目标资源的所有当前表示。 5. DELETE #删除由URL给出的目标资源的所有当前表示。
-
Flask路由默认响应GET 请求,通过route()装饰器提供方法参数
from flask import Flask, redirect, url_for, request
app = Flask(__name__)
@app.route('/success/<name>')
def success(name):
return 'welcome %s' % name
@app.route('/login',methods = ['POST', 'GET'])
def login():
if request.method == 'POST':
user = request.form['nm']
return redirect(url_for('success',name = user))
else:
user = request.args.get('nm')
return redirect(url_for('success',name = user))
if __name__ == '__main__':
app.run(debug = True)
-
request 传参
#from flask import Flask,request user = request.form['nm'] #POST接收 user = request.arg.get['nm'] #GET传参 #args是包含表单参数对及其对应值对的列表的字典对象。
模板
利用Flask所基于的Jinja2模板引擎的地方。而不是从函数返回硬编码HTML,可以通过render_template()函数呈现HTML文件。
- demo1
from flask import Flask,render_template
app = Flask(name)
@app.route('/')
def index():
return render_template(‘hello.html’) #Flask将尝试在templates文件夹中找到HTML文件
if name == 'main':
app.run(debug = True)
目录结构
Application folder
Hello.py
templates
hello.html
-
demo 2
-
hello.html
<!doctype html> <h1>Hello {{ name }}!</h1>
-
main.py
from flask import Flask, render_template app = Flask(name) @app.route('/hello/') def hello_name(user): return render_template('hello.html', name = user) # 与模板name传参 if name == 'main': app.run(debug = True)
-
Jinja2模板
1.{% ... %}用于语句 2.{{ ... }}用于表达式可以打印到模板输出
3.{# ... #}用于未包含在模板输出中的注释
4.# ... ##用于行语句
- demo1
{% if marks>50 %}
<h1> Your result is pass!</h1>
{% else %}
<h1>Your result is fail</h1>
{% endif %}
- demo 2
<!-- result.html -->
<table border = 1>
{% for key, value in result.iteritems() %}
<tr>
<th> {{ key }} </th>
<td> {{ value }} </td>
</tr>
{% endfor %}
</table>
from flask import Flask, render_template
app = Flask(name)
@app.route('/result')
def result():
dict = {'phy':50,'che':60,'maths':70}
return render_template('result.html', result = dict)
if name == 'main':
app.run(debug = True)
Flask静态文件
- demo
<!-- index.html -- >
<html>
<head>
<script type = "text/javascript"
src = "{{ url_for('static', filename = 'hello.js') }}" ></script>
</head>
<body>
<input type = "button" onclick = "sayHello()" value = "Say Hello" />
</body>
</html>
//hello.js
function sayHello() {
alert("Hello World")
}
# main.py
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/")
def index():
return render_template("index.html")
if __name__ == '__main__':
app.run(debug = True)
Request 对象
Request对象的重要属性如下所列:
-
Form - 它是一个字典对象,包含表单参数及其值的键和值对。
-
args - 解析查询字符串的内容,它是问号(?)之后的URL的一部分。
-
Cookies - 保存Cookie名称和值的字典对象。
-
files - 与上传文件有关的数据。
-
method - 当前请求方法。
后续
暂时学到这里,刚好项目够用。后续有空继续回来玩Flask。(顺便看看Flask的洞玩玩)