初始化
引入模块
from flask import Flask
启动
app = Flask( __name__)
## 设置 调试模式
app.debug = True
if __name__ == '__main__':
"""
配置hosts, port
"""
app.run( host='0.0.0.0', port=8080 )
启动配置
app = Flask( __name__, template_folder='resources/views', static_folder='resources/assets' )
# template_folder 模板文件路径
# static_folder 静态资源文件路径
路由设置
@app.route()
参数
uri:请求链接
methods:请求方式
@app.route( '/', methods=['GET'] )
def index():
return 'Hello World!'
渲染模板
from flask import render_template
"""
System Index
后端数据传递 - 多参数传递视图 , 分割
"""
@app.route( '/', methods=['GET'] )
def index():
data = {
'uid': 1,
'uname': "Carey"
}
return render_template( 'index.html', user = data )
传递参数
'''
segment
<string:arg> 字符串
<int:arg> 整数
<float:arg> 浮点
<path:arg> 路径
'''
@app.route( '/user/<uid>', methods=['GET'] )
def user( uid ):
if int( uid ) == 1:
uname = '张三'
elif int( uid ) == 2:
uname = '李四'
elif int( uid ) == 3:
uname = '王五'
else:
uname = '无名'
return f"Hi~ Jobs, Welcom Rome {uname}"
设置响应
from flask import make_response
"""
响应 response
text
json
"""
@app.route( '/user/list', methods=['GET'] )
def list():
data = []
for i in range(1, 20):
item = {
'id': i,
'name': f'张{i}',
'age': i + 50,
'email': f'zhang{i+10}@qq.com'
}
data.append( item )
return make_response( data )
前后端交互
from flask import request
'''
前后端交互
request 对象
GET: request.args
POST: request.form
'''
@app.route( '/user/save', methods=[ 'GET', 'POST' ] )
def save():
if 'GET' == request.method:
uname = request.args.get('uname')
uage = request.args.get('uage')
uemail = request.args.get('uemail')
respData = {
'id': round( 100,1000 ),
'name': uname,
'age': uage,
'email': uemail
}
return make_response(respData)
if 'POST' == request.method:
uname = request.form.get('uname')
uage = request.form.get('uage')
uemail = request.form.get('uemail')
respData = {
'id': round( 100,1000 ),
'name': uname,
'age': uage,
'email': uemail
}
return make_response( respData )
重定向
from flask import redirect 外部跳转
from flask import url_for 内部跳转
"""
重定向
redirect - 外部跳转
url_for - 内部跳转
"""
@app.route( '/redirt/<type>', methods=['GET'] )
def redirt( type ):
if 'baidu' == type:
return redirect( 'https://www.baidu.com' )
if 'google' == type:
return redirect( 'https://www.google.com' )
if 'self' == type:
return redirect( url_for( 'index' ) )
模板引擎
显示变量
{{ }}
<p> {{ item.id }} -- {{ item.name }} -- {{ item.age }} -- {{ item.email }} </p>
条件语句
{% if %}
{% elif %}
{% else %}
{% endif %}
{% if user.role == 'admin' %}
<div> 当前用户可查看 全部 位注册者 </div>
<div>
{% for item in list %}
<p> {{ item.id }} -- {{ item.name }} -- {{ item.age }} -- {{ item.email }} </p>
{% endfor %}
</div>
{% elif user.role == 'developer' %}
<div> 当前用户可查看 10 位注册者 </div>
<div>
{% for item in list[:10] %}
<p> {{ item.id }} -- {{ item.name }} -- {{ item.age }} -- {{ item.email }} </p>
{% endfor %}
</div>
{% elif user.role == 'employ' %}
<div> 当前用户可查看 5 位注册者 </div>
{% else %}
<div>当前用户无权限查看 </div>
{% endif %}
静态资源
此处与启动app时设置的静态资源地址相关联
{{ url_for( 'static', filename='' ) }}
<link rel="stylesheet" type="text/css" href="{{ url_for( 'static', filename='css/index.css' ) }}" />
<script src="{{ url_for( 'static', filename='js/index.js' ) }}"></script>
模板继承
{% block %} {% endblock %}
主模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>编程学习 - Flask 学习之路<</title>
<link rel="stylesheet" type="text/css" href="{{ url_for( 'static', filename='css/index.css' ) }}" />
{% block css %} {% endblock %}
</head>
<body>
<div class="container">
<div class="navbar">
<input type="checkbox" checked="checked">
<ul>
<li><a href="/">主页</a></li>
<li><a href="/user/list">用户</a></li>
<li><a href="/user/create">创建用户</a></li>
<li><a href="/redirt/self">重定向</a></li>
<li><a href="/redirt/baidu">外重定向</a></li>
<li><a href="/redirt/baidu">外重定向</a></li>
</ul>
</div>
{% if user %}
<div class="user">
欢迎回来! {{user.uname}}
</div>
{% endif %}
</div>
<div class="content">
{% block body %} {% endblock %}
</div>
<script src="{{ url_for( 'static', filename='js/index.js' ) }}"></script>
{% block javascript %} {% endblock %}
</body>
</html>
子模版
{% extends "layouts/freamwork.html" %}
{% block body %}
欢迎来到学习之路 - Flask {{user.uname}}!
{% endblock %}