Flask简单调用Redis、MySQL和生成token及token验证

flask中生成token flaks中生成token 阅读详情

项目地址:https://github.com/MasonYyp/myflask

1 安装python基础环境

# 安装flask
pip install flask

# 安装redis
pip install redis

# 安装操作MySQL的包
pip install flask-sqlalchemy
pip install pymysql
# 安装序列化包
pip install flask-marshmallow
pip install marshmallow-sqlalchemy


# 安装生成token相关的包
pip install pyjwt

# 安装生成验证码的包
pip install captcha

2 Docker安装redis和mysql

2.1 redis.conf

# redis.conf
# 可远程连接
# bind 127.0.0.1
# 解除保护模式
protected-mode no
# 数据持久化
appendonly yes
# 设置密码
requirepass 123456

2.2 创建redis容器

sudo docker run -itd \
--restart=always \
--name fl_redis \
-p 6379:6379 \
-v /home/fl_redis/redis.conf:/etc/redis/redis.conf \
-v /home/fl_redis/data:/data \
redis:6.2.2 redis-server /etc/redis/redis.conf

2.3 创建MySQL容器

# 安装MySQL,密码是123456
sudo docker run -itd \
--restart=always \
--name fl_mysql \
-p 3306:3306 \
-v /home/mysql/conf:/etc/mysql/conf.d \
-v /home/mysql/data:/var/lib/mysql \
-v /home/mysql/log:/var/log/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7

进入MySQL容器创建数据库

create database myflask default character set utf8mb4 collate utf8mb4_unicode_ci;

3 vue前端

3.1 前端页面

<template>
  <div class="login">
    <div>Login</div>
    <div class="lo_cont">
      <div>
        用户名:<el-input v-model="name" placeholder="请输入用户名"></el-input>
      </div>
      
      <div>
        密码:<el-input v-model="pwd" placeholder="请输入密码" show-password></el-input>
      </div>
      
      <div>
        验证码:<img v-bind:src="codeImgSrc"><el-input v-model="code" placeholder="请输入验证码"></el-input>
      </div>
      <el-button v-on:click="login">提交</el-button>
    </div>
  
  </div>
</template>

<script>

import axios from 'axios'

// 按需引入ElementUI组件
import 'element-ui/lib/theme-chalk/index.css' 
import { Input, Button } from 'element-ui'


export default {
  name: 'Login',
  props: {
    msg: String
  },
  components:{
    elInput: Input,
    elButton: Button
  },

  data:function(){
    return{
      name:"mason",
      pwd:"123456",
      code:"",
      codeKey: "",
      codeImgSrc: ""
    }
  },

  created:function(){
    this.get_captcha()
  },

  methods:{

    get_captcha: function(){
      axios.post("/flask/public/captcha").then(res=>{
        console.log(res.data)
        let data = res.data;
        this.codeImgSrc = data.code_img;
        this.codeKey = data.code_key;
      })
    },

    login: function(){
      let param = {
        name: this.name,
        pwd: this.pwd,
        code_key: this.codeKey,
        code: this.code
      }

      // 使用json方式传参
      axios.post("/flask/public/login", param).then(res=>{
        let token = res.data
        console.log(token);
      })
    }
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>

.lo_cont>>>.el-input{
  width: 30%;
}

</style>

3.2 截图

前端截图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UCayOZby-1663496733483)(Flask使用Redis存储tocken.assets/image-20220918172017664.png)]

4 flask工程

4.1 工程目录

在这里插入图片描述

4.2 代码

4.2.1 main
from flask import Flask

from route.interceptor import before_interceptor
from route.operate_blueprint import OperateBlueprint
from dao.base_db.mysql_db import init_mysql_db

app = Flask(__name__)


# 设置拦截器
@app.before_request
def route_interceptor():
    return before_interceptor()


# 初始化蓝本
operate_blueprint = OperateBlueprint(app)
operate_blueprint.init_blueprint()

# 初始化MySQL
init_mysql_db(app)


# Run the app
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)
4.2.2 config目录
4.2.2.1 common.py
import os


def get_root_path():
    cur_path = os.path.abspath(os.path.dirname(__file__))
    root_path, _ = os.path.split(cur_path)

    return root_path
4.2.2.2 db_conf.py

class RedisConf:
    # 配置基本参数
    pwd = "123456"
    host = "192.168.108.100"
    port = 6379


class MysqlConf:
    acc = "root"
    pwd = "123456"
    host = "192.168.108.100"
    port = 3306
    db = "myflask"


redis_conf = RedisConf()
mysql_conf = MysqlConf()
4.2.3 dao目录
4.2.3.1 base_db.mysql_db.py
from flask import Flask
from config.db_conf import mysql_conf
from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmallow

# 添加pymysql驱动,连接MySQL数据库
import pymysql
pymysql.install_as_MySQLdb()

# 创建MySQL单实例
mysql_db = SQLAlchemy()

# 创建Schema
mysql_schema = Marshmallow()


# 初始化MySQL数据库
def init_mysql_db(app: Flask):

    # 配置MySQL数据库url
    db_url = "mysql://" + mysql_conf.acc + ":" + mysql_conf.pwd + "@" + mysql_conf.host + ":" + str(mysql_conf.port) + "/" + mysql_conf.db
    app.config["SQLALCHEMY_DATABASE_URI"] = db_url

    # 关闭sqlalchemy自动跟踪数据库
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

    # 显示底层执行的SQL语句
    app.config['SQLALCHEMY_ECHO'] = True

    # 解决‘No application found. Either work inside a view function or push an application context.’
    app.app_context().push()

    # 初始化app
    mysql_db.init_app(app)

    # 初始化schema
    mysql_schema.init_app(app)


# 初始化table
def init_table():
    # 删除表
    mysql_db.drop_all()
    # 创建表
    mysql_db.create_all()
4.2.3.2 base_db.redis_db.py
import redis
from config.db_conf import redis_conf


class RedisDB:

    # 初始化redis
    def __init__(self):
        # 设置主机、端口号和密码
        redis_pool = redis.ConnectionPool(host=redis_conf.host, port=redis_conf.port, password=redis_conf.pwd, decode_responses=True)
        self.__strict_redis = redis.StrictRedis(connection_pool=redis_pool)

    # 在redis中添加键值,并设置过期时间
    def set(self, key, value, expiry):
        self.__strict_redis.set(name=key, value=value, ex=expiry)

    # 获取值
    def get(self, key):
        return self.__strict_redis.get(name=key)

    # 获取键值的剩余时间
    def ttl(self, key):
        # Time To Live
        return self.__strict_redis.ttl(name=key)


# 设置单例模式
redis_db = RedisDB()
4.2.3.3 base_db.mysql_db.model.user_model.py
from dao.base_db.mysql_db import mysql_db as db


# 创建用户表
class User(db.Model):
    # 用户
    __tablename__ = "tf_user"

    id = db.Column(db.Integer, nullable=False, primary_key=True, autoincrement=True)
    name = db.Column(db.String(32), nullable=False, unique=True)
    pwd = db.Column(db.String(32), nullable=False)

    def __repr__(self):
        # 显示对象中的信息
        return "User object: name=%s" % self.name
4.2.3.4 base_db.mysql_db.schema.user_schema.py
from dao.base_db.mysql_db import mysql_schema as ma
from dao.mysql_dao.model.user_model import User

"""
# 序列化方法1
# 需要
注意flask-marshmallow的版本:
    flask-marshmallow<0.12.0
    class AuthorSchema(ma.ModelSchema)
    
    flask-marshmallow>=0.12.0 (recommended)
    class AuthorSchema(ma.SQLAlchemyAutoSchema)
"""

# 使用flask_marshmallow初始化model
class UserSchema(ma.SQLAlchemyAutoSchema):
    class Meta:
        model = User
        load_instance = True


"""

# 序列号方法2
from marshmallow import Schema, fields

# 使用marshmallow初始化model
class UserSchema(Schema):
    id = fields.Integer()
    name = fields.String()
    pwd = fields.String()

    class Meta:
        # 设置序列化字段
        fields = ["id", "name", "pwd"]
        # 转化为有序字典
        ordered = True

"""
4.2.3 route目录
4.2.3.1 interceptor.py
from flask import request
from dao.base_db.redis_db import redis_db


# 设置拦截器
def before_interceptor():
    # Pass white list
    if white_list():
        pass
    else:
        res_status = check_token()
        if res_status == 1:
            pass
        else:
            return res_status


# 设置白名单
def white_list():
    url_white_list = ["/flask/public/captcha", "/flask/public/login", "/flask/public/register", "/flask/public/initdb"]
    cur_url = request.path

    # Pass the url
    if cur_url in url_white_list:
        return True
    else:
        return False


# 设置token
def check_token():
    token = request.headers.get("token")
    if token is None:
        return "Token None"

    token_ttl = redis_db.ttl(token)

    # 验证码已经过期
    if token_ttl <= 0:
        return "Token expired"

    # 获取redis中的code
    redis_token = redis_db.get(token)

    if token != redis_token:
        return "Token error"

    return 1
4.2.3.2 operate_blueprint.py
# Configure Blueprint

from route.public_route import public_bp
from route.userinfo import userinfo_bp


class OperateBlueprint():

    # Init the app
    def __init__(self, app):
        self.__app = app
        self.__base_path = "/flask"

    # 初始化蓝本
    def init_blueprint(self):
        # Register the blueprint
        self.__app_register_blueprint(public_bp)
        self.__app_register_blueprint(userinfo_bp)

    # 在Flask中添加蓝本
    def __app_register_blueprint(self, blueprint):
        self.__app.register_blueprint(blueprint, url_prefix=self.__base_path + blueprint.name)
4.2.3.3 public_route.py
from flask import Blueprint, jsonify, request
from service.public_service import register_user, login_user, generate_captcha, create_table


public_bp = Blueprint("/public", __name__)


@public_bp.route("/captcha", methods=['POST'])
def captcha():
    captcha_dict = generate_captcha()
    return jsonify(captcha_dict)


@public_bp.route("/login", methods=['POST'])
def login():
    # 获取json数据
    data = request.get_json()
    print(data)
    res = login_user(data['name'], data['pwd'], data['code_key'], data['code'])
    return jsonify(res)


@public_bp.route("/register", methods=['POST'])
def register():
    register_user()
    return "register"


@public_bp.route("/initdb", methods=['POST'])
def init_mysql_db():
    return create_table()
4.2.3.4 userinfo.py
from flask import Blueprint
userinfo_bp = Blueprint("/userinfo", __name__)


@userinfo_bp.route("/info", methods=['POST'])
def login():
    return "Mason"
4.2.4 service目录

public_service.py

from dao.base_db.redis_db import redis_db
from dao.base_db.mysql_db import mysql_db, init_table

from dao.mysql_dao.model.user_model import User
from dao.mysql_dao.schema.user_schema import UserSchema

from util.operate_captcha import operate_captcha
from util.operate_token import operate_token


def generate_captcha():
    # 生成验证码
    code = operate_captcha.generate_code()
    # 生成图片验证码
    image_base64_str = operate_captcha.generate_captcha_base64(code)

    # 生成唯一key
    code_key = operate_captcha.generate_code_key()

    # 存入Redis
    redis_db.set(code_key, code.casefold(), 30)

    data = {
        "code_key": code_key,
        "code_img": image_base64_str
    }

    return data


def register_user():
    user = User()
    user.name = "mason"
    user.pwd = "123456"

    # 添加数据
    mysql_db.session.add(user)
    mysql_db.session.commit()


def login_user(name, pwd, code_key, code):

    code_ttl = redis_db.ttl(code_key)

    # 验证码已经过期
    if code_ttl <= 0:
        return -1

    # 获取redis中的code
    redis_code = redis_db.get(code_key)

    # 验证码过期
    if redis_code != code.casefold():
        return -2

    # 查询数据
    user = User.query.filter_by(name=name, pwd=pwd).first()

    # 序列号对象
    user_json = UserSchema().dump(user)
    print(user_json)

    # 生成token
    token = operate_token.create_token(user.id, user.name, 60)

    # 添加到redis
    redis_db.set(token, token, 60)

    return token


def create_table():
    init_table()
    return "create table"
4.2.5 util目录
4.2.5.1 operate_captcha.py
from captcha.image import ImageCaptcha
import random

import base64
import uuid


class OperateCaptcha:

    def generate_code(self, code_len=4):
        code_chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
        chars_len = len(code_chars) - 1
        code = ''
        for _ in range(code_len):
            index = random.randint(0, chars_len)
            code = code + code_chars[index]
        return code

    def generate_captcha_base64(self, code):
        # 生成验证码
        image = ImageCaptcha()

        # 生成图片BytesIO
        img_bytes_io = image.generate(code)
        # 转化为字符串
        image_base64 = base64.b64encode(img_bytes_io.read())
        image_base64_str = "data:image/png;base64," + str(image_base64, 'utf-8')
        return image_base64_str

    def generate_code_key(self):
        # 生成唯一标识
        code_key = str(uuid.uuid1())
        return code_key


operate_captcha = OperateCaptcha()

4.2.5.2 operate_token.py
import jwt
from datetime import datetime, timedelta


# 操作Token
class OperateToken:

    def __init__(self):
        self._private_key = "123456"
        pass

    # 创建token
    def create_token(self, user_id, user_name, expiry_seconds):
        # Calculate expiry time
        expiry_time = datetime.utcnow() + timedelta(seconds=expiry_seconds)

        payload = {
            'exp': expiry_time,
            'user_id': user_id,
            'username': user_name
        }

        # 加密
        encode_jwt = jwt.encode(payload, self._private_key, algorithm='HS256')
        return encode_jwt

    # 验证token
    def check_token(self, token):
        decode_jwt = "-1"
        # 解密
        try:
            decode_jwt = jwt.decode(token, self._private_key, algorithms=['HS256'])
        except jwt.PyJWTError:
            print("Token is error!")
        return decode_jwt


operate_token = OperateToken()

5 postman截图

5.1 初始化数据表
http://127.0.0.1:5000/flask/public/initdb

5.2 注册接口
http://127.0.0.1:5000/flask/public/register

在这里插入图片描述

5.3 调用info接口

调用权限口需要验证token

http://127.0.0.1:5000/flask/userinfo/info

在这里插入图片描述

Python Web应用Session优化:Redis替代MySQL实战指南 Session是Web应用中管理用户状态的基础机制,其底层存储方案直接影响高并发场景下的响应延迟与系统稳定性。传统MySQL存储虽具事务一致性,但面对短时效、高读频、弱一致性要求的session数据,易引发行锁争用与I/O瓶颈。Redis凭借内存存储、原生TTL、原子操作等特性成为更匹配的技术选型。本文聚焦Ubuntu 22.04 + Python 3.10 + Redis 7.0生产环境,详解连接池配置、msgpack序列化、TTL智能续期、双写平滑迁移等关键实践,解决session读写性能骤降、数据丢失 阅读详情

相关推荐

30秒用AI生成TOTP双因素认证系统:Python Flask实战与安全加固

双因素认证(2FA)是提升账户安全性的关键技术,它要求用户提供两种以上不同类型的凭证进行身份验证。其核心原理在于结合‘你知道的东西’(如密码)和‘你拥有的东西’(如动态令牌),从而构建更坚固的防御层。基于时间的一次性密码(TOTP)作为2FA的标准化实现,通过共享密钥和时间同步,利用HMAC-SHA1等哈希算法生成短暂有效的动态密码,在安全性与用户体验间取得了良好平衡。这项技术价值在于以低成本实现离线、高安全性的认证,广泛应用于各类网站、应用及内部系统的登录保护。本文聚焦于**TOTP**认证的开发实践,并

467

flask 实现token机制

flask 实现token机制

weixin_69282241的博客 1044

Flask入坑记录(三)使用Flask的插件[上]

从小白开始的Flask入坑记录,记录Flask跨域插件"flask_cors"和"JWT验证插件flask_jwt_extended"的入门使用以及Python3自带的日志模块logging、配置项读写模块configparser的入门使用。

初夏de遐想的博客 1194

Flask后端 Token的使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 一、Token是什么? 在计算机身份认证中是令牌(临时),在我的认知里面,token类似于打开后端的钥匙,在你登录之后,后端给你一串钥匙,你可以根据这串钥匙访问后端一些上锁的地方,如果没上锁,就是公共访问区域,没有token也能访问,有些地方上锁了你没钥匙,就是你的token里没有给你相对应的权限钥匙。 二、使用步

aaaaaaaaaww12的博客 2349

DigitalOcean上自建认证API:JWT+Redis+FastAPI实战

认证API是现代Web服务的安全基石,其核心在于可控的身份验证流程与令牌管理机制。基于JWT的无状态鉴权方案凭借轻量、可扩展和跨域友好等优势,成为中小规模API的主流选择;而Redis凭借毫秒级过期与原子操作能力,天然适配refresh token黑名单、登录限流及TOTP临时码等关键场景。在DigitalOcean Droplet这类轻量云环境中,采用Python FastAPI构建独立认证服务,配合PostgreSQL存储用户凭证、Nginx实现HTTPS终止与路由分流,可在$5/月资源上交付生产就绪的

weixin_34122810的博客 410

vue+flask+redis+session+mysql+人脸识别.zip

整个小说网站采用vue-cli脚手架搭件,前后端分离flask+vue,在登录的时候可以采用人脸登录和密码登录,session存储在redis数据库中,mysql存储用户书架以及账号密码相关信息和所有书籍信息

Flask项目中CSRF Token实现的解决方案

基于Kafka+ElasticSearch+MongoDB+Redis+XXL-Job日志分析系统(学习)配置即权限:从传统开源 RBAC 框架到 SPARK 的六层数据护盾,告别改权限就要改代码的魔咒。c++&MFC 用boost.asio库写的串口功能,包含发送、异步接收、打开、重连、关闭功能。Windows下NVM保姆级指南:安装、切换版本、指定路径+淘宝镜像配置,一次搞定!第2集:技术选型的智慧:Flask vs FastAPI,GLM-4 vs GPT。

slngX_nf2si的博客 393

python web全栈开发最佳实践,flask+vue+redis+mysql构建前后端分离的房屋信息发布、租赁系统,功能齐全

该项目基于Vue作为前端, Flask作为服务端的前后端分离项目, 在项目中使用Mysql作为数据库, Redis作为缓存, 以及容联云作为第三方发送短信验证码(为避免阻塞, 其发送的任务由Celery异步执行), 其次还使用了七牛云作为图片文件的存储服务 在该项目中, 前端部分, 区域选项, 以及日期选项插件, 我基于Mui进行了二次封装, 其次, 还原生封装了一些项目中需要用到的方法, 如提取页面来源路径, 提取Cookie字段, 日期计算, Url查询参数提取等... 后端部分, 由于容联云官方提供的接口是Python2.7版本的源码, 而我项目使用的是Python3.6版本, 所以我对容联云的接口, 进行了改写, 并进一步进行了封装, 其次还有生成图片验证码的接口, 这里就不详细概述了... 整个项目所有的后端接口, 我使用Flask的蓝图, 将其划分为了四块, public(这是公共API, 主要实现验证码的方法), user(所有关于用户操作的行为API, 以及Model类都在这里实现的), house(所有对房屋的展示, 操作, 以及模型类都在这里实现) , ord

flask+redis+Mysql的简易聊天室(一)

Simple_chat 介绍 Redis+ Python3 + flask实现简易聊天室 源码 https://github.com/zh19990906/Simple_chats Redis 说明 这里面一共用到了3个redis的库,0库目前左右存储用户名的,后面有可能放弃使用,11和10是来校验token的,并且修复了一个用户可以产生多个token的情况,12库用来存储聊天记录,这个库一定要空,原因是后面会写一个维护的脚本,每天12点清空聊天室的内容,这样可以减少内存消耗, 配置 dockerfile已

weixin_45718715的博客 1492

AC7811无感FOC实战:从开环到闭环的电机控制调试全记录

本文详细记录了基于国产AC7811芯片实现无感FOC电机控制的全过程。从硬件软件环境搭建、开环I/F启动调试,到滑模观测器参数整定,再到平滑切入闭环及双环PID调节,提供了完整的实战步骤与参数调试心法。文章重点分享了无感控制从开环到闭环切换的关键技巧与常见问题排查清单,为工程师提供了一份避坑指南。

kotlin6android的博客 713

工程伦理-知识点汇总

工程伦理-知识点汇总

m0_46091747的博客 1万+

Flask框架

Flask诞生于2010年,是Armin ronacher(人名)用 Python 语言基于 Werkzeug 工具箱编写的轻量级Web开发框架。 Flask 本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login,数据库Flask-SQLAlchemy),都需要用第三方的扩展来实现。比如可以用 Flask 扩展加入ORM、窗体验证工具,文件上传、身份验证等。Flask 没有默认使用的数据库,你可以选择 MySQL,也可以用 NoSQ

有用的话关个注,点个赞,收个藏🫶。 2079

手把手教你完成YOLOv11分类识别界面搭建,使用Qt6设计YOLOv11分类识别系统,前台系统+后台管理系统开发实战,全网最详细教程

本项目结合YOLOv11分类识别算法和PySide6框架,开发了一套图形化分类识别系统。系统支持图片、视频和摄像头实时分类检测,并具备完善的用户管理功能,包括登录验证、个人信息修改等模块。最新版本新增了管理员后台管理系统,包含用户管理、权限控制等功能。系统采用MySQL数据库存储用户数据,界面设计采用QtDesigner完成,实现了高效的目标分类与友好的交互体验。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1051

使用Pytest为Flask构建单元测试

前言单元测试的主要目的是回归校验,避免新的修改影响此前的业务逻辑,此外,它还可以验证当前业务逻辑的健壮性,一个比较完整的单元测试,通常有最基本的测试加上比较复杂的边界测试构成。本文简单介...

weixin_30230009的博客 2527

第25节:cesium 地形开挖综合实例-地下管网(含源码+视频)

地图开挖综合示例,包括底图切换,绘制开挖区域,移除开挖区域,影藏地图等等。

qq_29384639的博客 1782

编程实践:寒武纪-LLM&VLM模型量化&部署

本文介绍了在MLU370-S4平台上对大模型(LLM/VLM)进行量化的两种方法:SmoothQuant和WeightOnly。以Qwen2-VL-2B模型为例,详细说明了两种量化方式的命令行参数配置,包括必须设置的per_channel选项和量化参数调整建议。量化完成后,提供了模型部署的具体命令示例,包含设备分配、端口设置、并行度等关键参数。文章强调在MLU370芯片上需要手动设置block_size,并指出两种量化方式只能二选一使用。配套资料已上传至百度网盘供参考。

微风❤水墨 507

python token 访问控制_python-web-framework-common

1、Python环境:理论上兼容Python2和Python3,细微地方需改动2、引用第三方库:1) 本项目使用自带三方包方式,部署时直接复制整个项目即可。故第三方包存放于项目根目录,常规IDE下直接运行main.py即可。若出现找不到三方包但确实存在,可能由于PYTHON_PATH环境变量所致,参考第3。2) 若想使用全局Python环境中pip所安装的包, 请删除本项目自带的三方包。3、命令行...

weixin_39663729的博客 125

S/4HANA 迁移前的必修课:用 SCMON 找出沉睡的自定义代码

SAP S/4HANA迁移项目中,SCMON工具能有效解决历史代码评估难题。通过监控ABAP对象调用情况,SCMON可识别40-60%处于"沉睡"状态的自定义代码。配置时需注意监控周期(建议3-6个月)和数据保留期(建议1年),并配合Time Slices功能进行时段分析。工具导出的调用数据可与测试覆盖率对比,帮助决策代码迁移优先级。实际应用中需结合业务场景,建议与SUSG工具配合使用,并保持持续监控。SCMON虽不能完全替代人工判断,但其提供的客观数据能显著提升迁移决策的科学性,建议在

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 291

Flask三端在线学习平台开发实战

在线学习平台开发涉及前后端分离架构、多端适配和数据库设计等关键技术。采用Flask框架可以快速构建轻量级RESTful API,结合MySQL和Redis实现高效数据存储与缓存。在教育行业应用中,视频断点续看、在线考试防作弊等功能的实现尤为关键。本文通过一个实际项目案例,详细解析了如何基于Flask开发同时支持PC网页端、微信小程序和钉钉工作台的三端在线学习平台,包括用户体系设计、课程管理、考试系统等核心模块的实现方案。特别针对微信和钉钉小程序的API差异问题,提供了具体的代码解决方案和性能优化建议。

weixin_30887919的博客 387

SAP S/4HANA 中 RAP 业务对象接口的消费模式

本文探讨了SAP S/4HANA中RAP业务对象接口的消费模式,重点介绍了通过EML直接调用和CDS投影两种Clean Core开发路径。文章分析了BO Interface作为稳定契约的价值,并提供了BAdI集成、OData服务发布等实际场景案例,同时对比了OData V2/V4的技术选型考量,最后强调了ADT向导使用中的DCL权限注意事项。全文旨在帮助开发者构建升级友好的业务对象消费方案。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 758

10步掌握!跨国企业在MySQL中实现数据主权的秘诀 vs. 传统方法,你选对了吗?

首先,我们要明确“数据主权”这一概念。简单来说,它指的是国家对其境内产生的所有类型的数据拥有绝对控制权。这意味着即使数据被存储在国外服务器上,只要该数据来源于某国,那么该国政府就有权对其进行监管。对于跨国公司来说,这就要求它们必须严格遵循不同国家关于数据保护的规定,如欧盟的GDPR、美国的《云法案》以及中国的《网络安全法》等。

java专栏 714

高校实验室报修系统:Django-Flask混合架构开发实践

Web开发框架是构建现代信息系统的核心技术基础,Django和Flask作为Python生态的两种主流框架,分别擅长复杂业务管理和轻量级API开发。通过ORM技术实现数据持久化,结合RESTful API设计规范,开发者能快速构建高可用的服务接口。在高校实验室管理等实际场景中,混合使用Django-Admin后台与Flask接口服务,既能保证开发效率又可应对高并发需求。本文以微信小程序报修系统为例,详解如何通过Django处理工单流转等核心业务,利用Flask实现高效的图片压缩传输,最终使维修响应时间缩短6

aodiyi6351的博客 355

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

微信小程序+Flask构建医美预约系统全栈实践

现代Web应用开发中,微信小程序与Python Flask的组合成为构建轻量级业务系统的热门选择。小程序提供原生体验与微信生态入口,Flask则以简洁灵活著称,二者结合能快速实现前后端分离架构。在医疗美容行业数字化转型背景下,这种技术栈可有效解决服务可视化、流程标准化等核心需求。通过RESTful API设计、JWT鉴权、数据库连接池等关键技术,系统实现了高并发预约处理与安全合规的数据管理。典型应用场景包括项目展示、智能排班、支付对账等模块,其中SM2加密算法和双Token机制保障了医疗数据安全。

weixin_34068198的博客 313

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Flask-Login 认证原理与生产级实践指南

Web 应用认证(Authentication)是保障用户身份可信传递的基础机制,其核心在于建立 request-response 循环中稳定、安全的身份上下文。Flask-Login 并非全自动登录插件,而是通过标准化 session 管理、用户对象生命周期控制和权限钩子集成,实现可扩展的身份状态治理。它不处理密码校验或数据库交互,专注解决‘验证后如何持续识别用户’这一关键问题。技术价值体现在解耦认证逻辑与业务代码、支持 remember me、fresh login、2FA 扩展等场景。典型应用包括后台

weixin_30307921的博客 448

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

GTE-text-vector-large保姆级教程:Flask中间件集成JWT认证与访问控制

本文介绍了如何在星图GPU平台上自动化部署GTE文本向量-中文-通用领域-large应用镜像,并构建安全的Web服务。通过集成Flask与JWT认证中间件,该镜像可实现文本向量化处理,典型应用于智能客服、文档分析等场景的命名实体识别、情感分析等任务,有效保护API访问安全。

weixin_33245447的博客 100

基于Flask与遗传算法的自动化测试平台搭建与核心功能验证

自动化测试是提升软件质量和开发效率的关键实践,其核心在于通过脚本或平台替代人工执行重复性测试任务。其原理通常涉及测试用例的管理、调度执行与结果验证。在持续集成与敏捷开发背景下,自动化测试的技术价值尤为凸显,能够实现快速回归验证,保障软件迭代的稳定性。应用场景广泛覆盖单元测试、接口测试及UI测试等领域。本文聚焦于一个结合了遗传算法进行测试用例智能生成的工程实践项目,该平台以Flask框架构建,旨在通过算法优化提升测试数据生成的效率与覆盖率,为测试开发工程师及算法工程化实践者提供了一个可本地部署、二次开发的原型

weixin_33796205的博客 350
上一篇: 前端实现可拖拽流程的js框架
下一篇: 使用python-docx生成word文档
MasonYyp
博客等级 码龄9年 301粉丝 297原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值