1. 案例
app.py
from flask import Flask, request, render_template, redirect, session
app = Flask(__name__, template_folder='templates')
app.debug = True
app.secret_key = 'sdfsdfsdfsdf'
'''
登录成功后将Users信息渲染在页面
1.GET请求访问login.html页面
2.POST请求提交用户输入的数据
3.在方法中做判断
4.登录成功要做一个标记,此处选择将登录成功用户的用户名存入session
5.登录成功渲染数据
6.登录登录未成功跳转login页面
7.未登录就先登录
8.登录失败重定向到登录页面,显示错误信息
'''
USERS = {
1: {'name': '猫猫', 'age': 23, 'gender': '女', 'text': "猫猫最可爱"},
2: {'name': '秋秋', 'age': 3, 'gender': '男', 'text': "秋秋最可爱"},
3: {'name': '果果', 'age': 3, 'gender': '女', 'text': "果果最可爱"},
}
@app.route('/login', methods=['POST', 'GET'])
def login():
if request.method == 'GET':
return render_template('login.html')
else:
username = request.form.get('username')
password = request.form.get('password')
if username == '猫猫' and password == '000318':
session['username'] = username
return '登录成功'
else:
return render_template('login.html', error='用户名或密码有误请重新登录')
@app.route('/index', methods=['GET'])
def index():
if session.get('username'):
return render_template('index.html',users=USERS)
else:
return redirect('login.html')
@app.route('/detail/<int:pk>', methods=['GET'])
def detial(pk):
if session.get('username'):
user = USERS.get(pk)
return render_template('detail.html',user=user)
return render_template('login.html', error='请您先登录')
if __name__ == '__main__':
app.run()
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
<form action="" method="post">
<p>用户名:<input type="text" name="username"></p>
<p>密码:<input type="password" name="password"></p>
<p><input type="submit" value="提交"></p>
<h3>{{ error }}</h3>
# 模版语法
</form>
</body>
</html>
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>index</title>
</head>
<body>
<h1>用户列表</h1>
<table>
{% for k,v in users.items() %} # flask的模板语法完全兼容dtl,可以加括号执行
<tr>
<td>{{k}}</td>
<td>{{v.name}}</td>
# 可以使用点语法取值
<td>{{v['name']}}</td>
# 可以使用中括号取值
<td>{{v.get('name')}}</td>
# 可以使用get('value')取值
<td><a href="/detail/{{k}}">查看详细</a></td>
# a 标签跳转链接,跳转到K对应的user详情
</tr>
{% endfor %}
</table>
</body>
</html>
detail.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>detail</title>
</head>
<body>
<h1>详细信息 {{user.name}}</h1>
# user是通过点击a标签传入的k值得到的user信息
<div>
{{user.text}}
</div>
</body>
</html>