视图,具体请看注释
- render_template从模板文件夹中呈现给定的模板
- redirect重定向
- request请求对象
- url_for结合redirect用,反向解析url,在路由加上endpoint=‘index’
学过django后再学这个感觉要飞起来了
# 渲染模板引擎 重定向 请求对象 反向解析重定向
from flask import Flask, render_template, redirect, request, url_for
import settings # 导入配置
app = Flask(__name__)
app.config.from_object(settings) # 加载配置
# 视图函数
# 主页
@app.route('/', endpoint='index') # endpoint:反向解析
def index():
name = '张三'
age = 18
names = ['aa', 'bb', 'cc','dddd', 'eeeee']
print(locals(), type(locals())) # 键值对形式的字典类型
# 字典形式
return render_template('index.html', content=locals()) # 渲染模板,键值对形式:content.name
# return render_template('index.html', name=name, age=age) # 渲染模板
# 注册,接收前端参数,get,post方法
@app.route('/register', methods=['GET', 'POST'], endpoint='register') # 指定请求方法, 还有反向解析
def register():
if request.method == 'POST': # 判断请求方法
username = request.form.get('username') # post方法提取参数,表单
print(username)
# return redirect('/') # 重定向到主页,参数:路径,状态码(302),浏览器看到状态码为302,会改变请求路径
return redirect(url_for('index')) # 使用反向解析重定向到主页
# 默认get方法
print(request.args.get('key')) # 问号传参接收参数,get方法
return render_template('register.html')
if __name__ == '__main__':
print(app.url_map) # 打印路由规则(路径)
app.run(port=8000) # 指定端口
前端渲染,Jinjia2
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>主页</h1>
{% if content.name %} {# 判断 #}
<h3>用户:{{ content.name }}----{{ content.get('name') }}</h3> {# 字典渲染:可以用python的代码get() #}
{% endif %}
<h3>名字列表:{{ content.names.0 }}</h3> {# 列表可以用点后面数字的方法取 #}
<ul>
{% for i in content.names %} {# 循环 #}
{% if i | length > 3 %} {# 判断长度 #}
<li>{{ loop.index }}、{{ i }}</li> {# loop属性:loop.index0,表示从零开始 #}
{% else %}
<i>{{ loop.index0 }}、{{ i }}</i>
{% endif %}
{% endfor %}
</ul>
<p>共{{ content.names | count }个</p> {# 过滤器count:计数 #}
</body>
</html>