(二)Flask快速上手之用户管理系统

  • 空讲理论知识记忆不深刻,所以简单的用户管理系统项目带领大家快速直接使用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>

猜你喜欢

转载自blog.csdn.net/qq_44907926/article/details/131446859