- 空讲理论知识记忆不深刻,所以简单的用户管理系统项目带领大家快速直接使用Flask,用的都是很简单的技术点,重点是session的使用,先知道怎么用(因为使用很简单方便),后续会慢慢剖析Flask源码,带大家把Flask扒开看看!!!
一、前置知识栈:
(1)Flask中使用session
在 Flask 中,Session(会话)是一种用于在不同请求之间存储和传递数据的机制。它允许您在用户访问网站时跟踪和存储用户特定的信息。Session 对象在 Flask 中使用 session 进行访问。
要使用 Session 功能,需要使用 Flask 的 session 模块,并设置一个密钥,以便对会话数据进行加密和解密。
需要注意的是,在Flask中,会话数据即session默认加密后存储在客户端的 cookie 中(而Django则是直接存储在数据库中)。您可以在 Flask 配置中设置 SESSION_TYPE 参数为 “filesystem” 或 “redis” 等值,来将会话数据存储在服务器端,以提高安全性和可扩展性。
总结起来,Flask 的会话功能可以在不同请求之间共享和存储用户特定的数据,从而实现用户认证、个性化设置等功能。
(2)Flask的模板引擎
Flask 使用 Jinja2 作为其默认的模板引擎。Jinja2 是一个功能强大且灵活的模板引擎,用于在 Flask 应用程序中渲染动态 HTML 页面。
要在 Flask 中使用 Jinja2 模板,您需要先创建一个包含模板文件的目录。通过将模板文件放置在templates目录中,Flask 将能够自动找到并加载这些模板。
二、Flask快速上手之用户管理系统
- 项目很简单很简单,大家直接CV到本地跑一下,访问下那些接口会更好!
项目目录结构:
main.py文件:
from flask import Flask, render_template, request, redirect, session
app = Flask(__name__) # 创建一个 Flask 应用程序的实例
# 设置密钥,用于对会话数据进行加密和解密
app.secret_key = 'GuHanZheIsCool'
app.debug = True
# 模拟数据库
USER_DICT = {
'1': {
'name': '小张', 'age': 18},
'2': {
'name': '小王', 'age': 28},
'3': {
'name': '小红', 'age': 38},
}
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'GET':
return render_template('login.html')
user = request.form.get('user')
pwd = request.form.get('pwd')
if user == '孤寒者' and pwd == '123':
# 将数据存储到会话中 默认情况下:django的session放数据库;flask的session加密后放浏览器cookie中
session['user_info'] = user
return redirect('/index')
else:
# 下面这两种都能给前端模板传参数msg
return render_template('login.html', msg='用户名或密码错误')
# return render_template('login.html', **{'msg': '用户名或密码错误'})
@app.route('/index')
def index():
# 从会话中获取数据
user_info = session.get('user_info')
if not user_info:
return redirect('/login')
return render_template('index.html', user_dict=USER_DICT)
@app.route('/detail')
def detail():
user_info = session.get('user_info')
if not user_info:
return redirect('/login')
uid = request.args.get('uid')
info = USER_DICT.get(uid)
return render_template('detail.html', info=info)
@app.route('/logout')
def logout():
del session['user_info']
return redirect('/login')
if __name__ == '__main__':
app.run('localhost', 4000)
index.html文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul>
{% for k, v in user_dict.items() %}
<li>{
{ v.name }} <a href="/detail?uid={
{ k }}">查看详细</a></li>
{% endfor %}
</ul>
</body>
</html>
login.html文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录系统-用户登录</title>
</head>
<body>
<h1>登录</h1>
<form method="post">
<input type="text" name="user">
<input type="password" name="pwd">
<input type="submit" value="提交"> {
{ msg }}
</form>
</body>
</html>
detail.html文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户详情页</title>
</head>
<body>
<h1>详细信息:</h1>
<div>{
{ info.name }}</div>
<div>{
{ info.age }}</div>
</body>
</html>