当前位置: 首页 > news >正文

Python Flask 框架开发

1. Python 代码示例(使用 Flask 框架)

1.1 安装依赖库

pip install flask flask_sqlalchemy flask_login flask_wtf

1.2 主应用文件 app.py
from flask import Flask, request, jsonify, redirect, url_for, render_template, flash
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user, current_user
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField, ValidationError, SelectField
from wtforms.validators import DataRequired, Length, EqualTo
import osapp = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
app.config['SECRET_KEY'] = os.urandom(24)
db = SQLAlchemy(app)
login_manager = LoginManager(app)
login_manager.login_view = 'login'class User(db.Model, UserMixin):id = db.Column(db.Integer, primary_key=True)username = db.Column(db.String(20), unique=True, nullable=False)password = db.Column(db.String(60), nullable=False)role = db.Column(db.String(20), nullable=False, default='user')  # 'user' or 'admin'class Order(db.Model):id = db.Column(db.Integer, primary_key=True)order_number = db.Column(db.String(20), unique=True, nullable=False)status = db.Column(db.String(20), nullable=False)user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)user = db.relationship('User', backref='orders')class ElectronicWaybill(db.Model):id = db.Column(db.Integer, primary_key=True)content = db.Column(db.String(255), nullable=False)order_id = db.Column(db.Integer, db.ForeignKey('order.id'), nullable=False)order = db.relationship('Order', backref='electronic_waybills')class RegistrationForm(FlaskForm):username = StringField('Username', validators=[DataRequired(), Length(min=4, max=20)])password = PasswordField('Password', validators=[DataRequired(), Length(min=6, max=60)])confirm_password = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')])role = SelectField('Role', choices=[('user', 'User'), ('admin', 'Admin')], default='user')submit = SubmitField('Register')def validate_username(self, field):if User.query.filter_by(username=field.data).first():raise ValidationError('Username is already in use.')@login_manager.user_loader
def load_user(user_id):return User.query.get(int(user_id))@app.route('/login', methods=['GET', 'POST'])
def login():if request.method == 'POST':username = request.form['username']password = request.form['password']user = User.query.filter_by(username=username).first()if user and user.password == password:login_user(user)return redirect(url_for('dashboard'))return render_template('login.html')@app.route('/logout')
@login_required
def logout():logout_user()return redirect(url_for('login'))@app.route('/register', methods=['GET', 'POST'])
def register():form = RegistrationForm()if form.validate_on_submit():user = User(username=form.username.data, password=form.password.data, role=form.role.data)db.session.add(user)db.session.commit()flash('Registration successful. You can now log in.', 'success')return redirect(url_for('login'))return render_template('register.html', form=form)@app.route('/dashboard')
@login_required
def dashboard():orders = Order.query.filter_by(user_id=current_user.id).all()order_list = [{'id': order.id, 'order_number': order.order_number, 'status': order.status} for order in orders]return jsonify({'orders': order_list, 'user_role': current_user.role})# 其他路由和功能可以根据需求添加
# ...if __name__ == '__main__':db.create_all()app.run(debug=True)
-- 创建 User 表
CREATE TABLE "user" (id INTEGER NOT NULL,username VARCHAR(20) NOT NULL,password VARCHAR(60) NOT NULL,role VARCHAR(20) NOT NULL DEFAULT 'user',PRIMARY KEY (id),UNIQUE (username)
);-- 创建 Order 表
CREATE TABLE order (id INTEGER NOT NULL,order_number VARCHAR(20) NOT NULL,status VARCHAR(20) NOT NULL,user_id INTEGER NOT NULL,PRIMARY KEY (id),UNIQUE (order_number),FOREIGN KEY(user_id) REFERENCES "user" (id)
);-- 创建 ElectronicWaybill 表
CREATE TABLE electronic_waybill (id INTEGER NOT NULL,content VARCHAR(255) NOT NULL,order_id INTEGER NOT NULL,PRIMARY KEY (id),FOREIGN KEY(order_id) REFERENCES "order" (id)
);
from your_app import db, User, Order, ElectronicWaybill# 创建用户
user1 = User(username='user1', password='password1', role='user')
user2 = User(username='user2', password='password2', role='admin')db.session.add_all([user1, user2])
db.session.commit()# 创建订单
order1 = Order(order_number='ORD123', status='Processing', user_id=user1.id)
order2 = Order(order_number='ORD456', status='Shipped', user_id=user2.id)db.session.add_all([order1, order2])
db.session.commit()# 创建电子面单
waybill1 = ElectronicWaybill(content='Content for order 1', order_id=order1.id)
waybill2 = ElectronicWaybill(content='Content for order 2', order_id=order2.id)db.session.add_all([waybill1, waybill2])
db.session.commit()

相关文章:

Python Flask 框架开发

1. Python 代码示例(使用 Flask 框架) 1.1 安装依赖库 pip install flask flask_sqlalchemy flask_login flask_wtf 1.2 主应用文件 app.py from flask import Flask, request, jsonify, redirect, url_for, render_template, flash from flask_sqla…...

k8s安装-学习环境

目录 环境准备 配置hosts 关闭防火墙 关闭交换分区 调整swappiness参数 关闭setlinux Ipv4转发 时钟同步 安装Docker 配置Yum源 安装 配置 启动 日志 安装k8s 配置Yum源 Master节点 安装 初始化 配置kubectl 部署CNI网络插件 Node节点 检查 环境准备 准…...

Vue3动态表单

示例代码如下: // 引入需要的依赖包 import { ref, reactive } from vue; import { useForm } from /composables/useForm;// 定义表单数据模型 const formModel reactive({name: ,age: ,gender: , });// 使用自定义的useForm函数创建表单实例 const { register, …...

2312skia,15vulkan及技巧

ANGLE介绍 ANGLE,把OpenGLES2或3调用转换为DirectX9,11或OpenGL调用.这些说明记录了如何在Windows或Linux上使用ANGLE而不是本地OpenGL后端. 细节 gclient sync下载ANGLE的源码及Skia的其他仅测试依赖项. 要针对ANGLE构建Skia测试工具,请添加skia_use_angletrue到args.gn文件…...

TLSF算法概念,原理,内存碎片问题分析

TLSF算法介绍 TLSF(Two-Level Segregated Fit,两级分割适应算法)。 第一级(first level,简称fl):将内存大小按2的幂次方划分一个粗粒度的范围,如一个72字节的空闲内存的fl是6(72介…...

sharding-jdbc实现分库分表

shigen日更文章的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长,分享认知,留住感动。 😅😅最近几天的状态有点不对,所以有几天没有更新了。 当我们的数据量比较大…...

JDK中lock锁的机制,其底层是一种无锁的架构实现的,公平锁和非公平锁

简述JDK中lock锁的机制,其底层是一种无锁的架构实现的,是否知道其是如何实现的 synchronized与lock lock是一个接口,而synchronized是在JVM层面实现的。synchronized释放锁有两种方式: 获取锁的线程执行完同步代码,…...

c++通过serial库进行上下位机通信

​编辑 风紊 现役大学牲,半退休robomaster视觉队员 写在前面 本文章主要介绍的是如何通过开源的serial库和虚拟串口实现上位机和下位机通信。 需求 假设下位机有这样一个数据报发送给上位机 struct DataRecv {char start s;TeamColor color TeamColor::Blu…...

【傻瓜级JS-DLL-WINCC-PLC交互】7.​C#直连PLC并读取PLC数据

思路 JS-DLL-WINCC-PLC之间进行交互,思路,先用Visual Studio创建一个C#的DLL控件,然后这个控件里面嵌入浏览器组件,实现JS与DLL通信,然后DLL放入到WINCC里面的图形编辑器中,实现DLL与WINCC的通信。然后PLC与…...

指针常量和常量指针的区别

文章目录 指针常量常量指针即是指针常量又是常量指针 指针常量 指针常量的本质是常量,表示的是 这个指针所指向的地址不能发生改变。即指针变量的值(即地址值)不能发生修改。但是指针所指向的那块内存里的值是可以修改的。 注意:…...

离散化算法总结

离散化是将大范围的数字映射到小范围的区间内,适用于稀疏的区间。 两个问题需要考虑: 1. 原数组中可能有重复元素,需要去重。 2. 如何算出离散化后的值(离散化后保序,使用二分)。 题目链接: …...

【海思SS528 | VO】MPP媒体处理软件V5.0 | VO模块编程总结

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…...

逻辑卷管理器lvm

啥意思,个人理解就是可以将物理分区合并一起组成大的磁盘,也可以移除其中的某个分区。 有四个概念需要了解下 PV,物理卷,VG 卷用户组,PE物理扩展块,LV逻辑卷 p物理,v卷,g用户组&a…...

函数声明后的“ - >”是什么?

这种语法的优势之一是可以在函数的返回类型中使用函数参数&#xff0c;使得返回类型更灵活。 先来看一个使用尾返回类型的例子&#xff1a; #include <iostream> auto add(int a, int b) -> int {return a b; }int main() {std::cout << add(3, 4) <<…...

51爱心流水灯32灯炫酷代码

源代码摘自远眺883的文章&#xff0c;大佬是30个灯的&#xff0c;感兴趣的铁汁们可以去看看哦~&#xff08;已取得原作者的许可&#xff09;&#xff1a;基于STC89C51单片机设计的心形流水灯软件代码部分_单片机流水灯代码_远眺883的博客-CSDN博客 由于博主是个小菜鸡&#xff…...

将不同时间点的登录状态记录转化为不同时间段的相同登录状态SQL求解

题目 有不同时间点的登录状态记录表state_log如下 请使用sql将其转化为如下表的不同时间段的相同登录状态记录 思路分析&#xff1a; 此类问题需要用到lag或lead函数取上下行对应的数据&#xff0c;然后对前后结果做比较打标签&#xff08;0或1&#xff09;&#xff0c;再…...

正则表达式与SQL数据库教程

使用正则表达式通过用例查询 Postgres 数据库&#xff1a; 正则表达式&#xff08;又名 Regex&#xff09; 正则表达式是一个强大的工具&#xff0c;广泛用于模式匹配和文本操作。 几乎所有编程语言都支持它们&#xff0c;并且经常用于文本提取、搜索和匹配文本等用例。 正则…...

HTML_web扩展标签

1.表格标签 2.增强表头表现 4.表格属性&#xff08;实际不常用&#xff09; 结构标签&#xff1a; 合并单元格&#xff1a; 更多请查看主页...

论文阅读:Distributed Initialization for VVIRO with Position-Unknown UWB Network

前言 Distributed Initialization for Visual-Inertial-Ranging Odometry with Position-Unknown UWB Network这篇论文是发表在ICRA 2023上的一篇文章&#xff0c;本文提出了一种基于位置未知UWB网络的一致性视觉惯性紧耦合优化测距算法( DC-VIRO )的分布式初始化方法。 对于…...

scrapy爬虫中间件和下载中间件的使用

一、关于中间件 之前文章说过&#xff0c;scrapy有两种中间件&#xff1a;爬虫中间件和下载中间件&#xff0c;他们的作用时间和位置都不一样&#xff0c;具体区别如下&#xff1a; 爬虫中间件&#xff08;Spider Middleware&#xff09; 作用&#xff1a; 爬虫中间件主要负…...

Arduino电机与舵机控制:从晶体管驱动到PWM调速实战

1. 项目概述与核心价值在机器人、智能小车或者任何一个需要“动起来”的嵌入式项目中&#xff0c;电机控制都是你绕不开的一道坎。你可能已经能让LED闪烁、让屏幕显示文字&#xff0c;但当你第一次尝试让一个小马达转起来&#xff0c;却发现Arduino板子上的引脚直接冒烟时&…...

别再死记公式了!用Python的NumPy库5分钟搞定极坐标与笛卡尔坐标转换(附象限处理代码)

极坐标与笛卡尔坐标转换&#xff1a;用NumPy实现高效科学计算 在数据分析和科学计算领域&#xff0c;坐标转换是一项基础但至关重要的操作。无论是处理雷达扫描数据、生成复杂数学图形&#xff0c;还是进行计算机视觉中的图像变换&#xff0c;开发者经常需要在极坐标和笛卡尔坐…...

2025最权威的AI辅助论文网站实际效果

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在学术研究跟论文写作这个领域当中&#xff0c;人工智能工具的兴起给学者和学生带来了从来没…...

基于RP2040 PIO与CircuitPython的IBM Model F键盘USB转接方案

1. 项目概述&#xff1a;让经典IBM键盘在现代电脑上重生如果你和我一样&#xff0c;对老式机械键盘那种扎实、清脆的“咔嗒”声和独特手感念念不忘&#xff0c;同时又对它们无法直接插在现代电脑上感到惋惜&#xff0c;那么这个项目就是为你准备的。我最近从朋友的一堆旧物里淘…...

STM32F103C8T6+ESP8266连接OneNET实战:从设备配置到数据上云完整流程解析

STM32F103C8T6ESP8266连接OneNET实战&#xff1a;从设备配置到数据上云完整流程解析 1. 物联网设备上云的核心价值与挑战 在智能家居、工业监测等场景中&#xff0c;将嵌入式设备数据实时上传至云端已成为刚需。STM32F103C8T6作为经典Cortex-M3内核MCU&#xff0c;搭配ESP8266 …...

ARM64 Linux内核启动入口stext深度解析:从汇编到C环境的构建

1. 项目概述&#xff1a;从开机到内核的第一行代码 按下电脑的电源键&#xff0c;屏幕上闪过一行行启动信息&#xff0c;最终进入我们熟悉的操作系统界面。这个看似简单的过程背后&#xff0c;隐藏着一系列精密而复杂的交接仪式。对于Linux内核开发者或系统底层爱好者而言&…...

基于Codebender在线IDE快速开发Adafruit FLORA可穿戴硬件项目

1. 项目概述&#xff1a;为什么选择在线IDE来玩转可穿戴硬件&#xff1f;如果你和我一样&#xff0c;是个喜欢鼓捣硬件的创客&#xff0c;那么对Arduino、树莓派这类开发板一定不陌生。每次开始一个新项目&#xff0c;最头疼的往往不是写代码&#xff0c;而是配环境&#xff1a…...

终极指南:如何用UI-TARS桌面版实现零代码智能桌面自动化

终极指南&#xff1a;如何用UI-TARS桌面版实现零代码智能桌面自动化 【免费下载链接】UI-TARS-desktop The Open-Source Multimodal AI Agent Stack: Connecting Cutting-Edge AI Models and Agent Infra 项目地址: https://gitcode.com/GitHub_Trending/ui/UI-TARS-desktop …...

双喷头3D打印实战指南:从原理到应用,掌握多材料制造

1. 双喷头3D打印&#xff1a;从“炫技”到“实用”的跨越如果你玩3D打印有一段时间了&#xff0c;看着满柜子的单色模型&#xff0c;心里大概会开始痒痒&#xff1a;能不能打印个红蓝相间的超级英雄手办&#xff1f;或者做个硬塑料外壳配软胶按钮的遥控器&#xff1f;这种想法&…...

JL-01多通道温湿度记录仪:环境监测的得力助手

在农业、林业与地质研究等领域&#xff0c;环境因子的精准监测是科研与生产决策的核心依据。JL-01多通道温湿度记录仪凭借小巧便携的机身、强大的功能配置与灵活的定制化服务&#xff0c;成为环境数据采集的得力工具&#xff0c;为各类场景下的温湿度监测提供可靠支持。一、功能…...