1.flask
1.1、flask简介
Flask简介:
Flask诞生于2010 年,是用Python语言基于Werkzeug工具箱编写的轻量级Web开发框架。
Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login),都需要用第三方的扩展来实现。
其WSGI工具箱采用Werkzeug (路由模块),模板引擎则使用Jinja2。这两个也是Flask框架的核心。
Python最出名的框架要数Django,此外还有Flask、Tornado等框架。虽然Flask不是最出名的框架,但是Flask应该算是最灵活的框架之一,这也是Flask受到广大开发者喜爱的原因。
Flask常用扩展包:
. Flask-SQLalchemy:操作数据库;. Flask-migrate:管理迁移数据库;. Flask-Mail:邮件;
· Flask-WTF:表单;
. Flask-Bable:提供国际化和本地化支持,翻译;. Flask-script:插入脚本;
. Flask-Login:认证用户状态;
. Flask-OpenlD:认证;
. Flask-RESTful:开发RESTAPI的工具;
. Flask-Bootstrap:集成前端Twitter Bootstrap框架;. Flask-Moment:本地化日期和时间;
. Flask-Admin:简单而可扩展的管理接口的框架
框架之间的差别
- Django功能大而全,Flask只包含基本的配置
Django的一站式解决的思路,能让开发者不用在开发之前就在选择应用的基础设施上花费大量时间。
Django有模板,表单,路由,认证,基本的数据库管理等等内建功能。与之相反,Flask只是一个内核,默认依赖于两个外部库: Jinja2模板引擎和Werkzeug wSGl工具集,其他很多功能都是以扩展的形式进行嵌入使用。
Flask 比 Django更灵活
Flask在 Django之后发布,现阶段有大量的插件和扩展满足不同需要
Django发布于2005 年,Flask创始于2010 年年中。
1 .启动Flask
from flask import Flask
2 .Flask 的Response
1 .HTTPResponse 返回字符串""
2 .render_template渲染返回模板文件
3 .redirect重定向
#Flask特殊封装
4 .send_file打开返回文件内容Content-Type:文件类型自动识别的文件类型
5 .jsonify返回标准的JSON格式字符串 Content-Type:application/json
3 .Flask 的Request
1 .Request导入-请求上下文
2 .Request.method请求方式HTTP 8 种 POST DELETE PUT GET OPTIONS请求跨域 3 .Request.path url_root路由地址
4 .Request.host获取访问主机地址
#方法:
request.form FormData中的数据to_dict ()直接返回字典数据
request.args URL中的数据
request.data 请求体的原始信息只有在 Content-Type 没有Form b""
request.json 请求头中的content-Type: application/json字典
request.headers 请求头中的信息
request.cookies 请求中Cookie的信息
#坑:
request.values不可触及的地带
4 .Flask 中的session
from flask import session
使用session的前提是在application 中加入secret_key
app.secret_key = "$%^&*($#$号^&*个YH &U"
def get session ():
session [ "user" ]= 123
交由客户端保管机制
1 .开启Session - session [ "user" ]= 123
2 .session序列化字符串
3 .通过secret key进行加密4 .通过Cookie―返回客户端
接收session
1 .通过Cookie 获取session
2 .通过secret_key 解密
3 .反序列化字典
4 .session
1.2、flask安装环境
使用拟环境安装Flask,可以避免包的混乱和版本的冲突,虚拟环境是Python解释器的副本,在虚拟环境中你可以安装扩展包,为每个程序单独创建的虚拟环境,可以保证程序只能访问虚拟环境中的包。而不会影响系统中安装的全局Python解释器,从而保证全局解释器的整洁。
虚拟环境使用virtualenv创建,可以查看系统是否安装了virtualenv:
$ virtualenv --version
(m369-1) [python@centos7.8 test]$ pip install virtualenv
1.Flask web框架+Helloworld
pip install Flask - 1.1.1
Flask Flask库文件
Jinja2模板渲染库
MarkupSafe 返回安全标签,只要Flask返回模板或者标签时都会依赖MarkupSafe
Werkzeug德文"工具” uWSGI底昙是wSGI Flask项目启动都是基于werkzeug
#三行启动Flask提供服务
from flask import Flask
app = Flask(__name__ )
app.run()
启动flask:
D:\pycharm\Python\Python376\python.exe D:/pycharm/Python/Python376/s1.py
* Serving Flask app 's1' (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
127.0.0.1 - - [29/Nov/2021 17:40:57] "GET / HTTP/1.1" 404 -
127.0.0.1 - - [29/Nov/2021 17:40:57] "GET /favicon.ico HTTP/1.1" 404 -
if __name__ =='__main__ ': #当前文件处于脚本状态时运行如下代码
app.run()
1.2.1、创建flask应用
from flask import Flask
app = Flask(__name__)
@app.route("/index" )
def index ():
return "helloWorld"
app.run()
1.2.2、flask简介-访问模板template
2 .Flask 中的Response
1 .HTTPResponse ( "Helloworld" ) "HelloWorld"
2 .render ( "html文件" ) render template ( "HTML文件" )
3 .redirect ("/home" ) redirect ("/home)
# 302 HTTP status
# 4xx 错误 客户端
#5xx 错误 服务器
ResponseHeaders 中加入了一个Localtion:http://url
#Flask特殊返回值
4.send_file ( " 文件路径") 返回文件
#打开并返回文件内容, 自动识别文件类型,在responseheafers中加入
# Content-Type: 文件类型–*文件类型是可以被客户端识别的文件类型
# 不能识别的类型,下载处理 - 浏览器会下载
5.jsonify (" 字符串或数据类型") 返回标准格式的JSON字符串
# Content-Type : application/json==标准格式
# Flask 1.1.1
# return d #暂时不建议使用兼容性
# 直接返回dict时本质上在执行jsonify (d
# API 接口 AJAX.post( {username : 123}) {function(data){obj = data}}
#利用Flask 做一个登录username password
#request?
3.Flask 中的Request
methods= [ " GET"," POST"]在添加路由的装饰器中允许请求方式,覆盖
1.request.form 获取FormData中的数据 to_dict () ImmutableMultiDict
2.request.method获取请求方式
3.request.args#获取URL中的数据字符串 get (" key") to_dict ()
4.request.files.get ( " my file")#获取一个 Filestorage Flask文件特殊对象
my_file = request.files.get(" my_file") #--->主要配置
new_file = os.path.join(" zhgedu", my_file.filename) #--->主要配置
my_file.save(new_file)
#获取数据
5.request.headers
6.request.cookies
7.request.path == request.url_rule
8.request.host == " 127.0 .0.1 :9527 "
9.request.host_url == " http:
10 .request.json
11 .request.data
4 .Flask中的session
Session服务器端的键值对
Cookie 客户端的键值对
交由客户端保管机制
开启session:
1 .开启Session [username] = 123 {
username : 123
}
2 .序列化字典==字符串
3 .加密字符串secretkey
接受反序列化session:
1 .从Cookie 中获取到一个叫session Key 的值
eyJ1c2VyIjoiQWxleGFuZGVyLkRTQi5MaSJ9.YaXG4w.oi9dNDpQxwqVt9M9-7 lrOQhz5Ys
2 .通过secretKey 解密session
3 .反序列化成字典
5 .Jinja2:I
{ {}}引用变量数据执行函数
{%%}逻辑代码
from flask import Flask
from flask import render_template
app = Flask (__name__)
@app.route ("/index" )
def index ():
return "helloWorld"
@app.route ("/home" )
def home ():
return render_template ("home.html" )
app.run ()
/templates/home.html:
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8" >
<title>Bootstrap 101 Template</title>
</head>
<body>
<h1> 你好, 世界!</h1>
</body>
</html>
1.2.3、redirect跳转
Python/s2.py
-------------
from flask import Flask
from flask import render_template
from flask import redirect
app = Flask(__name__)
@app.route("/index" )
def index ():
return "helloWorld"
@app.route("/home" )
def home ():
return render_template("home.html" )
@app.route("/re" )
def re ():
return redirect("/home" )
app.run()
http://127.0 .0 .1 :5000 /re
302 跳转
1.2.4、send_file发送文本
from flask import Flask
from flask import render_template
from flask import send_file
from flask import redirect
app = Flask(__name__)
@app.route("/index" )
def index ():
return "helloWorld"
@app.route("/home" )
def home ():
return render_template("home.html" )
@app.route("/re" )
def re ():
return redirect("/home" )
@app.route("/get_file" )
def get_file ():
return send_file("s1.py" )
app.run()
1.2.4.1、send发送图片
from flask import Flask
from flask import render_template
from flask import send_file
from flask import redirect
app = Flask(__name__)
@app.route("/index" )
def index ():
return "helloWorld"
@app.route("/home" )
def home ():
return render_template("home.html" )
@app.route("/re" )
def re ():
return redirect("/home" )
@app.route("/get_file" )
def get_file ():
return send_file("1.jpg" )
app.run()
1.2.4.2、send发送视频
from flask import Flask
from flask import render_template
from flask import send_file
from flask import redirect
app = Flask(__name__)
@app.route("/index" )
def index ():
return "helloWorld"
@app.route("/home" )
def home ():
return render_template("home.html" )
@app.route("/re" )
def re ():
return redirect("/home" )
@app.route("/get_file" )
def get_file ():
return send_file("2.mp4" )
app.run()
1.2.4.3、send下载程序
from flask import Flask
from flask import render_template
from flask import send_file
from flask import redirect
app = Flask(__name__)
@app.route("/index" )
def index ():
return "helloWorld"
@app.route("/home" )
def home ():
return render_template("home.html" )
@app.route("/re" )
def re ():
return redirect("/home" )
@app.route("/get_file" )
def get_file ():
return send_file("1.exe" )
1.2.5、jsonify格式
Python/s2.py
-------------
from flask import Flask
from flask import render_template
from flask import send_file
from flask import redirect
from flask import jsonify
app = Flask(__name__)
@app.route("/index" )
def index ():
return "helloWorld"
@app.route("/home" )
def home ():
return render_template("home.html" )
@app.route("/re" )
def re ():
return redirect("/home" )
@app.route("/get_file" )
def get_file ():
return send_file("1.jpg" )
@app.route("/get_json" )
def get_json ():
d = {
"name" :"Alexander.DSB.li"
}
return jsonify(d)
1.2.5.1修改文件类型
from flask import Flask
from flask import render_template
from flask import send_file
from flask import redirect
from flask import jsonify
app = Flask(__name__)
app.config["JSONIFY_MIMETYPE" ] = "application/DragonFire"
@app.route("/index" )
def index ():
return "helloWorld"
@app.route("/home" )
def home ():
return render_template("home.html" )
@app.route("/re" )
def re ():
return redirect("/home" )
@app.route("/get_file" )
def get_file ():
return send_file("1.jpg" )
@app.route("/get_json" )
def get_json ():
d = {
"name" :"Alexander.DSB.li"
}
return d
1.2.6、Flask 做一个登录username password
from flask import Flask ,render_template, request
app = Flask(__name__)
app.debug = True
@app.route("/login" , methods=["GET" ,"POST" ] )
def login ():
print (request.method)
if request.method == "GET" :
return render_template("login.html" )
if request.method == "POST" :
print (request.form.get("username" ))
print (request.form.to_dict())
return "200 ok"
if __name__ == '__main__' :
app.run('0.0.0.0' ,9527 )
192.168 .1 .103 - - [30 /Nov/2021 01:03:54 ] "POST /login HTTP/1.1" 200 -
POST
123
{'username' : '123' }
1.2.6.1、request.url编排方式
1.request.form 获取FormData中的数据 to_dict () ImmutableMultiDict
2.request.method获取请求方式
3.request.args
from flask import Flask ,render_template, request
app = Flask(__name__)
app.debug = True
@app.route("/login" , methods=["GET" ,"POST" ])
def login():
print (request.method)
if request.method == "GET" :
print (request.url)
print (request.values)
print (request.url_charset)
print (request.url_root)
print (request.url_rule)
print (request.args.to_dict())
print (request.args.get("id" ))
return render_template("login.html" )
if request.method == "POST" :
print (request.form.get("username" ))
print (request.form.to_dict())
return "200 ok"
if __name__ == '__main__' :
app.run('0.0.0.0' ,9527)
执行结果:
GET
http://10.8.65.183:9527/login?id =1
CombinedMultiDict([ImmutableMultiDict([('id' , '1' )])])
utf-8
http://10.8.65.183:9527/
/login
{'id' : '1' }
1.2.6.2、提交文件1
from flask import Flask ,render_template, request
app = Flask(__name__)
app.debug = True
@app.route("/login" , methods=["GET" ,"POST" ])
def login():
print (request.method)
if request.method == "GET" :
print (request.url)
print (request.values)
print (request.url_charset)
print (request.url_root)
print (request.url_rule)
return render_template("login.html" )
if request.method == "POST" :
print (request.files)
print (request.files.get("my_file" ))
return "200 ok"
/templates/login.html
<!DOCTYPE html>
<html lang="en" >
<head >
<meta charset="UTF-8" >
<title>Title</title>
</head>
<body>
<h1> 用户登录</h1>
<form action="" method="post" enctype="multipart/form-data" > \\提交方式
<p>username: <input type ="text" name="username" ></p>
<p><input type ="file" name="my_file" ></p> \\提交文件
<input type ="submit" value="登录" >
<form>
</body>
</html>
执行结果:
POST
10.8.65.183 - - [30/Nov/2021 10:36:06] "POST /login?id=1 HTTP/1.1" 200 -
ImmutableMultiDict([('my_file' , <FileStorage: '1.jpg' ('image/jpeg' )>)])
<FileStorage: '1.jpg' ('image/jpeg' )>
1.2.6.3、指定目录上载文件
from flask import Flask ,render_template,request
import os
app = Flask(__name__)
app.debug = True
@app.route("/login" , methods=["GET" ,"POST" ] )
def login ():
print (request.method)
if request.method == "GET" :
print (request.url)
print (request.values)
print (request.url_charset)
print (request.url_root)
print (request.url_rule)
return render_template("login.html" )
if request.method == "POST" :
print (request.files)
print (request.files.get("my_file" ))
my_file = request.files.get("my_file" )
new_file = os.path.join("zhgedu" , my_file.filename)
my_file.save(new_file)
return "200 ok"
if __name__ == '__main__' :
app.run('0.0.0.0' ,9527 )
1.2.6.4、登录实现跳转
from flask import Flask ,render_template,request,session
from flask import redirect
import os
app = Flask(__name__)
app.debug = True
@app.route("/login" , methods=["GET" ,"POST" ])
def login():
print (request.method)
if request.method == "GET" :
return render_template("login.html" )
if request.method == "POST" :
if request.form.get("username" ) == "123" :
return redirect("/" )
@app.route("/" )
def index():
return render_template("index.html" )
/templates/index.html
<!DOCTYPE html>
<html lang="en" >
<head >
<meta charset="UTF-8" >
<title>Bootstrap 101 Template</title>
</head>
<body>
<h1> 你好, 世界!zhgedu</h1>
</body>
</html>
1.2.7、session登录需要密码
Python/s2.py
-------------
from flask import Flask ,render_template,request
from flask import redirect
from flask import session
import os
app = Flask(__name__)
app.secret_key = "123456"
app.debug = True
@app.route("/login" , methods=["GET" ,"POST" ] )
def login ():
print (request.method)
if request.method == "GET" :
return render_template("login.html" )
if request.method == "POST" :
if request.form.get("username" ) == "Alexander.DSB.Li" :
session["user" ] = request.form.get("username" )
return redirect("/" )
@app.route("/" )
def index ():
print (session.get("user" ))
return render_template("index.html" )
if __name__ == '__main__' :
app.run('0.0.0.0' ,9527 )
1.2.8、{{传参}}
Python/s3.py
-------------
from flask import Flask ,render_template
app = Flask(__name__)
app.debug = True
STUDENT = {'name' : 'Old' , 'age' : 38, 'gender' : '中' }
STUDENT_LIST = [
{'name' : 'Old' , 'age' : 38, 'gender' : '中' },
{'name' : 'Boy' , 'age' : 73, 'gender' : '男' },
{'name' : 'EDU' , 'age' : 84, 'gender' : '女' }
]
STUDENT_DICT = {
1: {'name' : 'Old' , 'age' : 38, 'gender' : '中' },
2: {'name' : 'Boy' , 'age' : 73, 'gender' : '男' },
3: {'name' : 'EDU' , 'age' : 84, 'gender' : '女' },
}
@app.route("/stu" )
def stu():
return render_template("stuinfo.html" , stu_info = STUDENT)
if __name__ == '__main__' :
app.run('0.0.0.0' ,9528)
/template/stuinfo.html
<!DOCTYPE html>
<html lang="en" >
<head >
<meta charset="UTF-8" >
<title>学生信息</title>
</head>
<body>
{{ stu_info }}
</body>
</html>
1.2.8.1、stu_info.未知(传参创表)
Python/s3.py
-------------
from flask import Flask ,render_template
app = Flask(__name__)
app.debug = True
STUDENT = {'name' : 'zhgedu' , 'age' : 26, 'gender' : 'man' }
STUDENT_LIST = [
{'name' : 'Old' , 'age' : 38, 'gender' : '中' },
{'name' : 'Boy' , 'age' : 73, 'gender' : '男' },
{'name' : 'EDU' , 'age' : 84, 'gender' : '女' }
]
STUDENT_DICT = {
1: {'name' : 'Old' , 'age' : 38, 'gender' : '中' },
2: {'name' : 'Boy' , 'age' : 73, 'gender' : '男' },
3: {'name' : 'EDU' , 'age' : 84, 'gender' : '女' },
}
@app.route("/stu" )
def stu():
return render_template("stuinfo.html" , stu_info = STUDENT)
if __name__ == '__main__' :
app.run('0.0.0.0' ,9528)
/template/stuinfo.html
<!DOCTYPE html>
<html lang="en" >
<head >
<meta charset="UTF-8" >
<title>学生信息</title>
</head>
<body>
{{ stu_info }}
<table border="2px" >
<tr >
<td>name</td>
<td>age</td>
<td>gender</td>
</tr>
<tr >
<td>{{ stu_info.name }}</td>
<td>{{ stu_info.get("age" ) }}</td>
<td>{{ stu_info["gender" ] }}</td>
</tr>
</table>
</body>
</html>
1.2.8.2、
Python/s3.py
-------------
from flask import Flask ,render_template
app = Flask(__name__)
app.debug = True
STUDENT = {'name' : 'zhgedu' , 'age' : 26, 'gender' : 'man' }
STUDENT_LIST = [
{'name' : 'Old' , 'age' : 38, 'gender' : '中' },
{'name' : 'Boy' , 'age' : 73, 'gender' : '男' },
{'name' : 'EDU' , 'age' : 84, 'gender' : '女' }
]
STUDENT_DICT = {
1: {'name' : 'Old' , 'age' : 38, 'gender' : '中' },
2: {'name' : 'Boy' , 'age' : 73, 'gender' : '男' },
3: {'name' : 'EDU' , 'age' : 84, 'gender' : '女' },
}
@app.route("/stu" )
def stu():
return render_template("stuinfo.html" , stu_info = STUDENT,stu_list = STUDENT_LIST)
if __name__ == '__main__' :
app.run('0.0.0.0' ,9528)
/template/stuinfo.html
<!DOCTYPE html>
<html lang="en" >
<head >
<meta charset="UTF-8" >
<title>学生信息</title>
</head>
<body>
{{ stu_info }}
<table border="2px" >
<tr >
<td>name</td>
<td>age</td>
<td>gender</td>
</tr>
{% for stu in stu_info %}
<tr >
<td>{{ stu_info.name }}</td>
<td>{{ stu_info.get("age" ) }}</td>
<td>{{ stu_info["gender" ] }}</td>
</tr>
{% endfor %}
</table>
{{ stu_list }}
<table border="2px" >
<tr >
<td>name</td>
<td>age</td>
<td>gender</td>
</tr>
{% for stu in stu_list %}
<tr >
<td>{{ stu.name }}</td>
<td>{{ stu.get("age" ) }}</td>
<td>{{ stu["gender" ] }}</td>
</tr>
{% endfor %}
</table>
</body>
</html>
1.2.8.2.1、
Python376/s3.py
-----------------
from flask import Flask ,render_template
app = Flask(__name__)
app.debug = True
STUDENT = {'name' : 'zhgedu' , 'age' : 26, 'gender' : 'man' }
STUDENT_LIST = [
{'name' : 'Old' , 'age' : 38, 'gender' : '中' },
{'name' : 'Boy' , 'age' : 73, 'gender' : '男' },
{'name' : 'EDU' , 'age' : 84, 'gender' : '女' }
]
STUDENT_DICT = {
1: {'name' : 'Old' , 'age' : 37, 'gender' : '中' },
2: {'name' : 'Boy' , 'age' : 73, 'gender' : '男' },
3: {'name' : 'EDU' , 'age' : 84, 'gender' : '女' },
}
@app.route("/stu" )
def stu():
return render_template("stuinfo.html" , stu_info = STUDENT,stu_list = STUDENT_LIST,stu_dict = STUDENT_DICT)
if __name__ == '__main__' :
app.run('0.0.0.0' ,9528)
/template/stuinfo.html
<!DOCTYPE html>
<html lang="en" >
<head >
<meta charset="UTF-8" >
<title>学生信息</title>
</head>
<body>
{{ stu_info }}
<table border="2px" >
<tr >
<td>name</td>
<td>age</td>
<td>gender</td>
</tr>
{% for stu in stu_info %}
<tr >
<td>{{ stu_info.name }}</td>
<td>{{ stu_info.get("age" ) }}</td>
<td>{{ stu_info["gender" ] }}</td>
</tr>
{% endfor %}
</table>
{{ stu_list }}
<table border="2px" >
<tr >
<td>name</td>
<td>age</td>
<td>gender</td>
</tr>
{% for stu in stu_list %}
<tr >
<td>{{ stu.name }}</td>
<td>{{ stu.get("age" ) }}</td>
<td> {% if stu["gender" ] != "男" and stu["gender" ] != "女" %}
李昊
{% else %}
{{ stu["gender" ] }}
{% endif %}
</td>
</tr>
{% endfor %}
</table>
{{ stu_dict }}
{% for foo in stu_dict %}
{{ stu_dict[foo].get("name" ) }}
{{ stu_dict[foo]["age" ] }}
{{ stu_dict[foo].gender }}
{% endfor %}
<table border="2px" >
<td> {% for foo ,item in stu_dict.items() %}
{{ foo }}
{{ item.name }}
{% endfor %}
</td>
</table>
</body>
</html>
1.2.8.3、if _else判断
Python/s3.py
-------------
from flask import Flask ,render_template
app = Flask(__name__)
app.debug = True
STUDENT = {'name' : 'zhgedu' , 'age' : 26, 'gender' : 'man' }
STUDENT_LIST = [
{'name' : 'Old' , 'age' : 38, 'gender' : '中' },
{'name' : 'Boy' , 'age' : 73, 'gender' : '男' },
{'name' : 'EDU' , 'age' : 84, 'gender' : '女' }
]
STUDENT_DICT = {
1: {'name' : 'Old' , 'age' : 37, 'gender' : '中' },
2: {'name' : 'Boy' , 'age' : 73, 'gender' : '男' },
3: {'name' : 'EDU' , 'age' : 84, 'gender' : '女' },
}
@app.route("/stu" )
def stu():
return render_template("stuinfo.html" , stu_info = STUDENT,stu_list = STUDENT_LIST,stu_dict = STUDENT_DICT)
if __name__ == '__main__' :
app.run('0.0.0.0' ,9528)
/template/stuinfo.html
<!DOCTYPE html>
<html lang="en" >
<head >
<meta charset="UTF-8" >
<title>学生信息</title>
</head>
<body>
{{ stu_info }}
<table border="2px" >
<tr >
<td>name</td>
<td>age</td>
<td>gender</td>
</tr>
{% for stu in stu_info %}
<tr >
<td>{{ stu_info.name }}</td>
<td>{{ stu_info.get("age" ) }}</td>
<td>{{ stu_info["gender" ] }}</td>
</tr>
{% endfor %}
</table>
{{ stu_list }}
<table border="2px" >
<tr >
<td>name</td>
<td>age</td>
<td>gender</td>
</tr>
{% for stu in stu_list %}
<tr >
<td>{{ stu.name }}</td>
<td>{{ stu.get("age" ) }}</td>
<td> {% if stu["gender" ] != "男" and stu["gender" ] != "女" %}
李昊
{% else %}
{{ stu["gender" ] }}
{% endif %}
</td>
</tr>
{% endfor %}
</table>
</body>
</html>
1.2.8.4、global全局传参
Python/s3.py
-------------
from flask import Flask ,render_template
app = Flask(__name__)
app.debug = True
STUDENT = {'name' : 'zhgedu' , 'age' : 26, 'gender' : 'man' }
STUDENT_LIST = [
{'name' : 'Old' , 'age' : 38, 'gender' : '中' },
{'name' : 'Boy' , 'age' : 73, 'gender' : '男' },
{'name' : 'EDU' , 'age' : 84, 'gender' : '女' }
]
STUDENT_DICT = {
1: {'name' : 'Old' , 'age' : 37, 'gender' : '中' },
2: {'name' : 'Boy' , 'age' : 73, 'gender' : '男' },
3: {'name' : 'EDU' , 'age' : 84, 'gender' : '女' },
}
@app.template_global()
def ab(a,b):
return a+b
@app.route("/stu" )
def stu():
return render_template("stuinfo.html" , stu_info = STUDENT,stu_list = STUDENT_LIST,stu_dict = STUDENT_DICT)
if __name__ == '__main__' :
app.run('0.0.0.0' ,9528)
/template/stuinfo.html
<!DOCTYPE html>
<html lang="en" >
<head >
<meta charset="UTF-8" >
<title>学生信息</title>
</head>
<body>
{{ stu_info }}
<table border="2px" >
<tr >
<td>name</td>
<td>age</td>
<td>gender</td>
</tr>
{% for stu in stu_info %}
<tr >
<td>{{ stu_info.name }}</td>
<td>{{ stu_info.get("age" ) }}</td>
<td>{{ stu_info["gender" ] }}</td>
</tr>
{% endfor %}
</table>
{{ stu_list }}
<table border="2px" >
<tr >
<td>name</td>
<td>age</td>
<td>gender</td>
</tr>
{% for stu in stu_list %}
<tr >
<td>{{ stu.name }}</td>
<td>{{ stu.get("age" ) }}</td>
<td> {% if stu["gender" ] != "男" and stu["gender" ] != "女" %}
李昊
{% else %}
{{ stu["gender" ] }}
{% endif %}
</td>
</tr>
{% endfor %}
</table>
{{ stu_dict }}
{% for foo in stu_dict %}
{{ stu_dict[foo].get("name" ) }}
{{ stu_dict[foo]["age" ] }}
{{ stu_dict[foo].gender }}
{% endfor %}
<table border="2px" >
<td> {% for foo ,item in stu_dict.items() %}
{{ foo }}
{{ item.name }}
{% endfor %}
</td>
</table>
<p> {{ ab(22,2) }} </p>
</body>
</html>
1.2.8.5、macro_定义标签
from flask import Flask ,render_template
app = Flask(__name__)
app.debug = True
STUDENT = {'name' : 'zhgedu' , 'age' : 26, 'gender' : 'man' }
STUDENT_LIST = [
{'name' : 'Old' , 'age' : 38, 'gender' : '中' },
{'name' : 'Boy' , 'age' : 73, 'gender' : '男' },
{'name' : 'EDU' , 'age' : 84, 'gender' : '女' }
]
STUDENT_DICT = {
1: {'name' : 'Old' , 'age' : 37, 'gender' : '中' },
2: {'name' : 'Boy' , 'age' : 73, 'gender' : '男' },
3: {'name' : 'EDU' , 'age' : 84, 'gender' : '女' },
}
@app.template_global()
def ab(a,b):
return a+b
@app.route("/stu" )
def stu():
return render_template("stuinfo.html" , stu_info = STUDENT,stu_list = STUDENT_LIST,stu_dict = STUDENT_DICT)
if __name__ == '__main__' :
app.run('0.0.0.0' ,9528)
<!DOCTYPE html>
<html lang="en" >
<head >
<meta charset="UTF-8" >
<title>学生信息</title>
</head>
<body>
{{ stu_info }}
<table border="2px" >
<tr >
<td>name</td>
<td>age</td>
<td>gender</td>
</tr>
{% for stu in stu_info %}
<tr >
<td>{{ stu_info.name }}</td>
<td>{{ stu_info.get("age" ) }}</td>
<td>{{ stu_info["gender" ] }}</td>
</tr>
{% endfor %}
</table>
{{ stu_list }}
<table border="2px" >
<tr >
<td>name</td>
<td>age</td>
<td>gender</td>
</tr>
{% for stu in stu_list %}
<tr >
<td>{{ stu.name }}</td>
<td>{{ stu.get("age" ) }}</td>
<td> {% if stu["gender" ] != "男" and stu["gender" ] != "女" %}
李昊
{% else %}
{{ stu["gender" ] }}
{% endif %}
</td>
</tr>
{% endfor %}
</table>
{{ stu_dict }}
{% for foo in stu_dict %}
{{ stu_dict[foo].get("name" ) }}
{{ stu_dict[foo]["age" ] }}
{{ stu_dict[foo].gender }}
{% endfor %}
<table border="2px" >
<td> {% for foo ,item in stu_dict.items() %}
{{ foo }}
{{ item.name }}
{% endfor %}
</td>
</table>
<p> {{ ab(22,2) }} </p>
{% macro my_input(ty,na) %}
请输入用户名 -> <input type ="{{ ty }}" name="{{ na }}" >
{% endmacro %}
<p>这就是我自己创造的input标签:
{{ my_input("text" ,"username" ) }}
{{ my_input("password" , "pass" ) }}
{{ my_input("file" , "myfile" ) }}
</p>
</body>
</html>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具