Flask 的基本概念
Flask 是一个非常轻量级的框架,提供了搭建 Web 服务的必要组件。
一个简单的flask 程序
# 倒入Flask类
from flask import Flask
# 实例化一个Flask对象
app = Flask(__name__)
# __name__是当前目录的名字,是这个成程序的根目录
# 作用:根据这个参数确定flask的根目录,从而更快的查找模板和html文件的默认路径
# 创建一个路由,路由可以理解为,url和pytho程序中的函数之间的映射关系
@app.route('/')
# 视图函数,返回给用户的内容
def hello():
return '<h1>hello world</h1>'
# 运行flask应用,可以指定ip和端口
app.run()
注意:__name__的意思是模块或者包的名称,默认的是当前文件所在的目录
路由:路由在python和url之间形成了一种映射关系,而每个路由又绑定了一个视图函数,因此,url间接的执行了视图函数。
视图函数:返回给浏览器的内容。
flask中一些方法
- render_template
利用render_template在视图函数中,和templates中的html文件进行一个连接。 - url_for
根据传入的视图函数找到他路由 - redirect
根据传入的路由,定向到对应的视图函数。
动态url
产生背景:一个页面中,含有用户传入的信息,开发者不可能为每个用户创建一个url和页面内容,只能根据用户传入的数据构建用户自己的url和相应的内容。
rom flask import Flask,request
app = Flask(__name__)
# 动态路由
# 1.url里面可以标记变量形式为<变量名>
# 2.动态路由里面变量的类型 int,string,float,path,uuid
@app.route('/<user>/')
def login(user):
return '欢迎%s来到社区' %user
# 特殊的url地址: http://www.baidu.com/query?id=123&name=westos
@app.route('/query')
def query():
# 获取url地址里面对应的value值
id = request.args.get('id')
name = request.args.get('name')
return 'id:%s,name:%s' %(id,name)
app.run()
注意:在传入的数据中,也可以加数据类型。
http中get方法和post方法
om flask import Flask, render_template, request, abort, redirect, url_for
app = Flask(__name__)
@app.route('/index/')
def index():
return render_template('index.html')
@app.route('/login/',methods=['POST','GET'])
def login():
if request.method == 'POST':
user = request.form['name']
#注意:这里获取表单里数据的方式
# request.form[]
passwd = request.form['passwd']
if user == 'root' and passwd == 'westos':
return redirect(url_for('index'))
else:
abort(404)
else:
return render_template('login.html')
app.run()
分析:如果要从某个html文件要上传数据,有post和个他两种方法:
post:不会将传入的信息显示在url里面
get:会显示在url‘里面,不利于信息的保密
上面login函数的分析:
当第一次通过url加载时,会执行外部else里面的内容
然后,当我输入密码和名字点击登陆时,根据form表单里面的内容action=post会执行外面的if的语句。
模板引擎
jinja2常用语法:
for循环:
{% for i in li %}
{% endfor %}
if语句:
{% if user == "westos" %}
{elif user = 'linux"}
{% else %}
{% endif %}
from flask import Flask,render_template
app = Flask(__name__)
class User(object):
def __init__(self,name,passwd):
self.name = name
self.passwd = passwd
def __str__(self):
return "<User:%s>" %self.name
@app.route('/')
def index1():
name = 'python'
li = [1,2,3]
d =dict(a=1,b=2)
u = User('python','linux')
return render_template('index.html',
name=name,
li=li,
d=d,
u=u)
app.run()
对应的index1.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{ name }}<br>
{{ li }}<br>
{{ d }}<br>
{{ u }}
</body>
</html>
结果:
自定义过滤器
import time
from flask import Flask,render_template
app = Flask(__name__)
class User(object):
def __init__(self,name,passwd):
self.name = name
self.passwd = passwd
def __str__(self):
return "<User:%s>" %self.name
# 自定义一个过滤器
def format_data(value):
ttime = time.localtime(value)
return time.strftime('%Y-%M-%D %H:%m:%s')
# 像一个app里面添加一个过滤器
app.add_template_filter(format_data,'format_data')
@app.route('/index2/')
def index2():
name = 'python'
li = [1,2,3]
d =dict(a=1,b=2)
u = User('python','linux')
return render_template('index2.html',
name=name,
li=li,
d=d,
u=u,
time = time.time())
app.run()
index2对应的html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--常见的字符串操作-->
{{ name | upper }} <br>
{{ name | lower }} <br>
{{ "hello" | capitalize }} <br>
{{ name | reverse }} <br>
<!--常见的数值操作-->
{{ -12.578411935 | round }} <br>
{{ -12.21795872 | round | abs }} <br>
<!--常见的列表操作-->
{{ li }} <br>
{{ li | first }} <br>
{{ li | last }} <br>
{{ li | length }} <br>
{{ li | sum }} <br>
{{ li | sort | reverse }} <br>
{{ li | join(':') }} <br>
<!--对字典的操作-->
{% for i in d %}
{{ i }}
{% endfor %}
<!--自定义函数-->
{{ time | format_data }}
</body>
</html>
结果: