- 空讲理论知识记忆不深刻,所以简单的用户管理系统项目带领大家快速直接使用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__)
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':
session['user_info'] = user
return redirect('/index')
else:
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>Titletitle>
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>