Python-flask项目入门
一、flask对于简单搭建一个基于python语言-的web项目非常简单
二、项目目录
示例代码 git路径

三、代码介绍
1、安装pip依赖
通过pip插入数据驱动依赖pip install flask-sqlalchemy 和 pip install pymysql
2.配置数据源 config.py
DIALECT = 'mysql'
DRIVER = 'pymysql'
USERNAME = 'root'
PASSWORD = '123456'
HOST = '127.0.0.1'
PORT = '3306'
DATABASE = 'tgcrm'# mysql 不会认识utf-8,而需要直接写成utf8
SQLALCHEMY_DATABASE_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALECT, DRIVER, USERNAME, PASSWORD, HOST, PORT,DATABASE)
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_ECHO = True# 加载密钥
key_access = '&^_^&protect*py_&^_^&'
3、引用orm框架 访问数据库
/mapper/exts.py
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
4、启动文件 app.py
from flask import Flask
# 引用数据库启动文件
from mapper.exts import db
# 引用数据库配置文件
import config
# 引用数据库
from controller.user_controller import *app = Flask(__name__)
app.config.from_object(config)
db.init_app(app)app.register_blueprint(user, url_prefix="/user")# 全局拦截器校验token
@app.before_request
def before():key = str(request.headers.get('TOKEN'))if key != format(config.key_access):return 'Password error'else:passif __name__ == '__main__':app.run(host='0.0.0.0', port=8060)
5、数据库操作
通过Flask提供orm框架对数据库进行操作
5.1增加
# 添加 http://127.0.0.1:5000/user/add/2/1
@user.route('/add/<username>/<pwd>')
def add_user(username, pwd):print(username, pwd)userinfo = User(username=username, pwd=pwd)db.session.add(userinfo)db.session.commit()# # 接受前端发来的数据# data = json.loads(request.form.get('data'))## # lesson: "Operation System"# # score: 100# lesson = data["lesson"]# score = data["score"]## # 自己在本地组装成Json格式,用到了flask的jsonify方法# info = dict()# info['name'] = "pengshuang"# info['lesson'] = lesson# info['score'] = score# return jsonify(info)return jsonify("ADD_SUCCESS")
5.2删除
@user.route('/delete/<int:id>')
def delete_user(id):print(id)# 第一种user1 = User.query.filter().first()print(user1.id)db.session.delete(user1)db.session.commit()# 第二种user2 = User.query.filter(User.id == 2).delete()db.session.commit()return jsonify("DELETE_SUCCESS")
5.3修改
@user.route('/update/<int:id>')
def update_user(id):user1 = User.query.filter(User.id == id).first()user1.username = "我是修改后的"db.session.merge(user1)db.session.commit()return jsonify("UPDATE_SUCCESS")
5.4查询
@user.route('/list')
def list_users():users = User.query.all()print(users)users_output = []for user in users:users_output.append(user.to_json())return jsonify(users_output)
5.5条件查询
1.filter_by和filter
两种写法根据版本的不同:
filter_by: 用于查询简单的列名,不支持比较运算符
filter比filter_by的功能更强大,支持比较运算符,支持or_、in_等语法。
-
data = UserInfo.query.filter(UserInfo.name=='1').all()
-
data = UserInfo.query.filter_by(name='1').all()
1. 根据用户名查询符合条件的第一条数据
User.query.filter_by(username=username).first()
print("查询1:", user1.to_json())
2. 查询名字结尾字符为g的所有数据[开始/包含]
User.query.filter(User.username.endswith('g')).all()
User.query.filter(User.username.contains('g')).all()
3. 查询名字不等于wang的所有数据[2种方式]
from sqlalchemy import not_
注意了啊:逻辑查询的格式:逻辑符_(类属性其他的一些判断)
User.query.filter(not_(User.username=='yang')).all()
User.query.filter(User.username!='yang').all()
4. 查询名字和邮箱都以 li 开头的所有数据[2种方式]
from sqlalchemy import and_
User.query.filter(and_(User.username.startswith('li'), User.email.startswith('li'))).all()
User.query.filter(User.username.startswith('li'), User.email.startswith('li')).all()
5. 查询password是 `123456` 或者 `email` 以 `itheima.com` 结尾的所有数据
from sqlalchemy import or_
User.query.filter(or_(User.pwd=='123456', User.email.endswith('tiantian.com'))).all()
6. 查询id为 [1, 3, 5, 7, 9] 的用户列表
User.query.filter(User.id.in_([1, 3, 5, 7, 9])).all()
7. 查询name为liu的角色数据 关系引用
# 举例 暂时没有
User.query.filter_by(username='liu').first().role.name
8.获取第一条记录
User.query.first()
6、分页对象
-
has_prev/has_next——是否有上一页/下一页
-
Items——当前页的数据列表
-
prev_num/next_num——上一页/下一页的页码
-
total——总记录数
-
pages——总页数
@user.route('/loadUserPage/<int:page>/<int:per_page>')
def list_user(page, per_page):""" 用户分页 """# 每一页的数据大小-per_page 页码-page# 1. 查询用户信息user = User.query# 2. 准备分页的数据print(page, per_page)user_page_data = user.paginate(page, per_page=per_page)users_output = []for user in user_page_data.items:users_output.append(user.to_json())print("当前页的数据列表", users_output)print("是否有上一页", user_page_data.has_prev)print("是否下一页", user_page_data.has_next)print("上一页的页码", user_page_data.prev_num)print("下一页的页码", user_page_data.next_num)print("总记录数", user_page_data.total)print("总页数", user_page_data.pages)return jsonify(users_output)
""" 输出
当前页的数据列表 [{'pwd': '2', 'id': 2, 'username': '2', 'nick': '2'}]
是否有上一页 True
是否下一页 True
上一页的页码 1
下一页的页码 3
总记录数 7
总页数 7
"""
四、多模块配置 蓝图blueprint
在app项目中引用,可以在app中声明多个路径 /user、/admin 、/customer等等
from controller.user_controller import userapp = Flask(__name__)
app.config.from_object(config)
db.init_app(app)app.register_blueprint(user, url_prefix="/user")
在子应用中声明 controller/user_controller
from flask import Blueprint, jsonify, request, jsonuser = Blueprint('user', __name__)# 查询全部 http://127.0.0.1:5000/user/list
@user.route('/list')
def list_users():users = User.query.all()print(users)users_output = []for user in users:users_output.append(user.to_json())return jsonify(users_output)
五、统一过滤器
在app.py文件加入前置过滤器
# 引用配置文件
import config# 全局拦截器校验token
@app.before_request
def before():key = str(request.headers.get('TOKEN'))if key != format(config.key_access):return 'Password error'else:pass
配置文件包括
# 加载密钥
key_access = '&^_^&protect*py_&^_^&'
此时通过postman访问接口,会对header进行请求头校验,不满足请求直接被打回

直接当携带了TOKEN=xxxx才可以正常访问该接口

相关文章:
Python-flask项目入门
一、flask对于简单搭建一个基于python语言-的web项目非常简单 二、项目目录 示例代码 git路径 三、代码介绍 1、安装pip依赖 通过pip插入数据驱动依赖pip install flask-sqlalchemy 和 pip install pymysql 2.配置数据源 config.py DIALECT mysql DRIVER pymysql USERN…...
基于数据库 Sqlite3 的 root 管理系统
1.服务器 1.1服务器函数入口 #include "server.h"int main(int argc, char const *argv[]) {char buf[128] {0};char buf_ID[256] {0};// 接收报错信息判断sqlite3 *db;// 创建员工信息的表格,存在则打开db Sqlite_Create();if (db NULL){printf("sqlite_…...
Hadoop 之 Hive 4.0.0-alpha-2 搭建(八)
Hadoop 之 Hive 搭建与使用 一.Hive 简介二.Hive 搭建1.下载2.安装1.解压并配置 HIVE2.修改 hive-site.xml3.修改 hadoop 的 core-site.xml4.启动 三.Hive 测试1.基础测试2.建库建表3.Java 连接测试1.Pom依赖2.Yarm 配置文件3.启动类4.配置类5.测试类 一.Hive 简介 Hive 是基于…...
vue3常用API之学习笔记
目录 一、setup函数 vue2与vue3变量区别 二、生命周期 三、reactive方法 四、ref方法 1、简介 2、使用 3、ref与reactive 4、获取标签元素或组件 五、toRef 1、简介 2、ref与toRef的区别 六、toRefs 七、shallowReactive 浅reactive 1、简介 2、shallowreactiv…...
Python 程序设计入门(005)—— 字符串操作
Python 程序设计入门(005)—— 字符串操作 目录 Python 程序设计入门(005)—— 字符串操作一、字符串切片与连接1、切片的索引方式2、切片操作的基本表达式3、 切片操作举例4、字符串连接 二、字符串替换:replace() 方…...
怎样将项目jar包放到服务器上
目录 1、在配置文件中配置账号密码 2.在父级的pom里面,加上这个标签 3. deploy部署 4. 注:这两个id得匹配上(原因:有的人会只有上传到测试包的权限,id对应,拥有账号密码的才能有权限) 5.子项…...
ruby调试
如果下载 ruby-debug-ide gem install ruby-debug-ide vscode 下载 ruby扩展 1, ruby 2,修改launch.json...
【云原生】使用kubeadm搭建K8S
目录 一、Kubeadm搭建K8S1.1环境准备1.2所有节点安装docker1.3所有节点安装kubeadm,kubelet和kubectl1.4部署K8S集群1.5所有节点部署网络插件flannel 二、部署 Dashboard 一、Kubeadm搭建K8S 1.1环境准备 服务器IP配置master(2C/4G,cpu核心…...
HCIE-Datacom真题和机构资料
通过认证验证的能力 具备坚实的企业网络跨场景融合解决方案理论知识,能够使用华为数通产品及解决方案进行企业园区网络、广域互联网络及广域承载网络的规划、建设、维护及优化,能够胜任企业网络全场景专家岗位(包括客户经理、项目经理、售前…...
轮足机器人硬件总结
简介 本文主要根据“轮腿机器人Hyun”总结的硬件部分。 轮腿机器人Hyun开源地址:https://github.com/HuGuoXuang/Hyun 1 电源部分 1.1 78M05 78M05是一款三端稳压器芯片,它可以将输入电压稳定输出为5V直流电压. 1.2 AMS1117-3.3 AMS1117-3.3是一种输…...
Flowable-网关-排他网关
目录 定义图形标记XML内容示例视频教程 定义 排他网关,也叫异或(XOR)网关,是 BPMN 中使用的最常见的网关之一,用来在流转中实 现发散分支决策。排他网关需要和条件顺序流搭配使用,当流程执行到排他网关&am…...
GET 和 POST 的区别
GET 和 POST 的区别(流利说) 从 http 协议的角度来说,GET 和 POST 它们都只是请求行中的第一个单词,除了语义不同,其实没有本质的区别。 之所以在实际开发中会产生各种区别,主要是因为浏览器的默认行为造成…...
FFmpeg中硬解码后深度学习模型的图像处理dnn_processing(一)
ffmpeg 硬件解码 ffmpeg硬件解码可以使用最新的vulkan来做,基本上来说,不挑操作系统是比较重要的,如果直接使用cuda也是非常好的选择。 AVPixelFormat sourcepf AV_PIX_FMT_NV12;// AV_PIX_FMT_NV12;// AV_PIX_FMT_YUV420P;AVPixelFormat d…...
计及需求响应和电能交互的多主体综合能源系统主从博弈优化调度策略(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
local-path-provisioner的使用(hostPath、local、local-path-provisioner三者对比)
前言 环境:k8s 1.22.17 、centos7.9 有时候,为了使用本地服务器上的磁盘存储资源,我们会使用hostPath这种方式来为k8s提供本地存储,本篇就来对比一下hostPath、local这两种使用本地服务器储存的方案,从而引出第三种lo…...
命令行快捷键Mac Iterm2
原文:Jump forwards, backwards and delete a word in iTerm2 on Mac OS iTerm2并不允许你使用 ⌥← 或 ⌥→ 来跳过单词。 你也不能使用 ⌥backspace 来删除整个单词。 下面是在Mac OS上如何配置iTerm2以便能做到这一点的方法。 退格键 首先,你需要将你的左侧 ⌥…...
无涯教程-Lua - Modules(模块)
模块就像可以使用 require 加载的库,并且具有包含Table的单个全局名称,该模块可以包含许多函数和变量。 Lua 模块 其中一些模块示例如下。 -- Assuming we have a module printFormatter -- Also printFormatter has a funtion simpleFormat(arg) -- …...
url重定向
不安全的url跳转 不安全的url跳转问题可能发生在一切执行了url地址跳转的地方。 如果后端采用了前端传进来的(可能是用户传参,或者之前预埋在前端页面的url地址)参数作为了跳转的目的地,而又没有做判断的话 就可能发生"跳错对象"的问题。 url跳转比较直接的危害是…...
Linux 查看IP地址、子网掩码和网关的配置信息
使用以下命令来查看IP地址、子网掩码和网关的配置信息: 1,使用ifconfig命令: ifconfig 在输出中,找到你正在使用的网络接口的配置信息。你将看到类似以下的内容: eth0: flags4163<UP,BROADCAST,RUNNING,MULTICA…...
token
token验证流程: ①客户端使用用户名和密码请求登录。 ②服务端收到请求,验证用户名和密码。 ③验证成功后,服务端会生成一个token,然后把这个token发送给客户端。 ④客户端收到token后把它存储起来,可以放在cookie…...
《Foundation 网格 - 大型设备》
《Foundation 网格 - 大型设备》 引言 在当今科技日新月异的时代,大型设备在各个领域都扮演着至关重要的角色。其中,Foundation 网格作为一项创新技术,正在逐渐改变着我们的生产方式和生活质量。本文将深入探讨Foundation 网格的特点、应用以及未来发展趋势。 一、Founda…...
Scratch二次开发实战:如何按需“阉割”菜单栏功能?从关闭语言切换、主题到隐藏教程按钮
Scratch教学环境定制指南:精准控制菜单栏功能的艺术 1. 为什么需要定制Scratch界面? 在少儿编程教育领域,Scratch作为全球最受欢迎的图形化编程工具之一,其默认界面设计面向的是广泛年龄段的国际用户。然而在实际教学场景中&#…...
入门首选:8bit逐次逼近型SAR ADC电路设计成品,基于SMIC 0.18工艺,3.3V供...
8bit逐次逼近型SAR ADC电路设计成品 入门时期的第三款sarADC,适合新手学习等。 包括电路文件和详细设计文档。 smic0.18工艺,单端结构,3.3V供电。 整体采样率500k,可实现基本的模数转换,未做动态仿真,文档内…...
PADS 铜箔区域规则与技巧
铜箔一定要非直角 直角会向外辐射 然后能走直线不走斜线方显布局的落落大方铜箔布好后可以选择任选去选择铜箔的边沿去拉它的形状 还可以通过打断去让他多几个拐点直接分割一个...
-python-langchain框架(3-3-常用的几种文本分割 )
一、文本分割的核心逻辑与关键参数无论哪种分割方法,核心都是通过参数控制文本块的大小和关联性,先理清这几个核心参数,后续方法理解会事半功倍:chunk_size:单个文本块的最大长度(字符 / Token 数ÿ…...
2026届最火的五大AI论文工具解析与推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 可采取如下结构化操作指令来降低文本里的人工智能生成特性, 首先,增添…...
OpenClaw人人养虾:自动化故障排查
本指南汇总了 OpenClaw 各自动化模块(Cron、Hooks、Webhooks、Polls)的常见故障及排查步骤。遇到自动化任务异常时,请按照以下分类逐步排查。通用诊断命令在深入排查之前,先运行以下命令获取全局状态:# 查看 Gateway 运…...
银河麒麟系统下VSCode安装全攻略:从下载到桌面图标配置(附QT开发环境搭建)
银河麒麟系统下VSCode与QT开发环境深度配置指南 在国产操作系统逐渐普及的今天,银河麒麟作为一款基于Linux的国产操作系统,正受到越来越多开发者的关注。对于习惯使用VSCode进行开发的程序员来说,如何在银河麒麟系统上高效配置开发环境成为一…...
掌握NSudo权限管理工具:从系统维护到高级开发实战指南
掌握NSudo权限管理工具:从系统维护到高级开发实战指南 【免费下载链接】NSudo [Deprecated, work in progress alternative: https://github.com/M2Team/NanaRun] Series of System Administration Tools 项目地址: https://gitcode.com/gh_mirrors/ns/NSudo …...
Microsoft Agent Framework 1.0 正式发布:.NET AI Agent 开发正式从 Demo 走向工程化。每一位.NET 开发者都必须关注的重大更新。
Microsoft Agent Framework 1.0 正式发布:Agent Skills 补齐后,Agent 开发真正进入工程化时代如果你最近在关注微软的 AI Agent 技术栈,这次发布值得认真看。Microsoft Agent Framework .NET 1.0.0 正式上线。这不是一次普通的版本升级&#…...
