Python全栈 Web(Flask框架、模型、sqlalchemy)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Flask、Python、Django、框架、服务器、客户端、浏览器、交互、WEB、Python前端、CSS、JAVA、HTML、H5、PHP、JavaScript、JQuery、分布式开发

Flask的文件传输:



如果大批量上传数据的时候(如:大文件)  就不能使用网页上传了
主要是由于http协议不支持  需要使用单独的上传工具(c/s版的)

URL不存在参数上限的问题,HTTP协议规范也没有对URL长度进行限制。
这个限制是特定的浏览器及服务器对它的限制。
IE对URL长度的限制是2083字节(2K+35字节)对于其他浏览器,
如FireFox,Netscape等,则没有长度限制,
这个时候其限制取决于服务器的操作系统。即如果url太长,
服务器可能会因为安全方面的设置从而拒绝请求或者发生不完整的数据请求。

post 理论上讲是没有大小限制的,HTTP协议规范也没有进行大小限制,
但实际上post所能传递的数据量大小取决于服务器的设置和内存大小。
因为我们一般post的数据量很少超过MB的,所以我们很少能感觉的到post的数据量限制,
但实际中如果你上传文件的过程中可能会发现这样一个问题,
即上传个头比较大的文件到服务器时候,可能上传不上去,以php语言来说,
查原因的时候你也许会看到有说PHP上传文件涉及到的参数PHP默认的上传有限定,
一般这个值是2MB,更改这个值需要更改php.conf的post_max_size这个值。
这就很明白的说明了这个问题了




模型 Models:
什么是模型?
模型  是根据数据库中表的结构来创建出来的class 
每一张表到编程语言中就是一个class 
表中的每一个列 到编程语言中就是一个class属性
创建和使用模型 ORM框架:
什么是ORM?
(Object Relational Mapping)
对象关系映射
ORM的三大特征:
1.数据表(Table)到编程类的映射(Class)的映射
  数据库中的每一张表对应编程语言中 都有一个类

  在ORM中允许将数据表自动生成一个类
  也允许将类自动生成一张表

2.数据类型的映射
  将数据表中的字段以及数据类型 对应到编程语言中类的属性

  在ORM中允许将表中的字段和数据类型自动映射到编程语言中
  也允许将类中的属性和类型也映射到数据库表中

3.关系映射
允许将数据库中表之间的关系对应到编程语言中类之间的关系
数据库表之间的关系  一对一  一对多  多对多
一对一:
主外键关联 外键需要加唯一约束
一对多:
主外键关联
多对多:
                                                第三方关系表
ORM的优点:
提高了开发的效率
能够省略庞大的数据访问层 即便不使用SQL编码 也能完成对数据的CRUD操作



定义模型:
框架的配置
安装sqlalchemy
sudo pip3 install sqlalchemy
sudo pip3 install flask-sqlalchemy
创建数据库
create database flask default charset utf8
collate utf8_general_ci;
配置数据库:

			app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://username:password@host:port/database"

			app.config["SQLALCHEMY_DATABASE_URL"] = "mysql://root:123456@:127.0.0.1:3306/mysql"

db是SQLALchmey的实例对象 表示程序正在使用的数据库
同时也获得了SQLALchemy中的所有功能

定义模型:
模型:
数据库中的表在编程语言中的体现 本质就是一个Python的类 模型类 实体类
类中的属性要与数据库中的列相对应
语法:

				class ModelName(db.Model):
					__tablename__ = "TABLENAME"
					COLUME_NAME = db.olumn(db.TYPE, OPTIONS)


ModelName:
定义模型名称 根据表名设定
TABLENAME:
映射搭配数据库中表的名字
COLUMN_NAME:
属性名,映射到表中列的名字
db.TYPE;
映射到列的数据库类型
OPTIONS:
列选项
db.TYPE 列类型:
类型名             Python类型                  说明

Integer         int                普通整数 32位
SamllInteger    小范围整数             小范围整数 16位
BigInteger           int或long             不限精度的整数
Float                    float                  浮点数
Numeric       decimal.Decimal            定点数
String                    str                  变长字符串
Text                       str               变长字符串 优化后的
Unicode             Unicode              变长Unicode字符串
UnicodeText      Unicode             优化后的变长Unicode字符串
Boolean                bool                    布尔类型
Date                datetime.date               日期  
Time                dataeime.time               时间
DateTime       datetime.datetime        日期和时间
OPTIONS列选项:
选项名                说明
primary key     设置为True则表示该列为主键
unique             设置为True则表示该列的值唯一
index               设置为True则表示该列要创建索引
nullable           设置为True则表示该列允许为空
default            为该列定义默认值

from flask import Flask, request, render_template
from flask_sqlalchemy import SQLAlchemy

import pymysql
pymysql.install_as_MySQLdb()

app = Flask(__name__)
#指定连接字符串
app.config['SQLALCHEMY_DATABASE_URI']='mysql://root:123456@localhost:3306/flask'
#指定让SQLAlchemy自动追踪程序的修改
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
#指定执行完操作之后自动提交
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True

#为当前的项目创建一个SQLAlchemy的实例
db = SQLAlchemy(app)

# 创建模型类 - Models
# 创建 Users 类,
class Users(db.Model):
    # 映射到表中叫 users 表
    __tablename__ = 'users'
    # 创建字段 : id , 主键,自增
    id = db.Column(db.Integer,primary_key=True)
    # 创建字段 : username , 长度为80的字符串,不允许为空,必须唯一
    username = db.Column(db.String(80),nullable=False,unique=True)
    # 创建字段 : age , 整数,允许为空
    age = db.Column(db.Integer)
    # 创建字段 : email,长度为120的字符串,必须唯一
    email = db.Column(db.String(120),unique=True)

    def __init__(self,username,age,email):
        self.username = username
        self.age = age
        self.email = email

    def __repr__(self):
        return '<Users:%r>' % self.username

# 将创建好的实体类映射回数据库
# db.drop_all()
db.create_all()


if __name__ == "__main__":
    app.run(debug=True)


数据库操作:
插入
db.session.add(Models)
db.session.commit()


@app.route('/insert')
def insert_views():
    # 创建 Users 对象
    users = Users('Paris',38,'wei8023521@gmail.com')
    # 将对象通过db.session.add()插入到数据库
    db.session.add(users)
    # 提交插入操作
    db.session.commit()
    return "Insert Success"

@app.route('/register',methods=['GET','POST'])
def register():
    if request.method == 'GET':
        return render_template('02-register.html')
    else:
        # 接收前端传递过来的数据
        username = request.form.get('username')
        age = int(request.form.get('age'))
        email = request.form.get('email')
        # 将数据构建成 Users 对象
        users = Users(username,age,email)
        # 通过 db.session.add 将对象保存进数据库
        db.session.add(users)
        # 提交
        # db.session.commit()
        return "Register OK"


if __name__ == "__main__":
    app.run(debug=True)





相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4天前
|
JSON 数据可视化 测试技术
python+requests接口自动化框架的实现
通过以上步骤,我们构建了一个基本的Python+Requests接口自动化测试框架。这个框架具有良好的扩展性,可以根据实际需求进行功能扩展和优化。它不仅能提高测试效率,还能保证接口的稳定性和可靠性,为软件质量提供有力保障。
21 7
|
1天前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
14 2
|
17天前
|
敏捷开发 测试技术 持续交付
自动化测试之美:从零开始搭建你的Python测试框架
在软件开发的马拉松赛道上,自动化测试是那个能让你保持节奏、避免跌宕起伏的神奇小助手。本文将带你走进自动化测试的世界,用Python这把钥匙,解锁高效、可靠的测试框架之门。你将学会如何步步为营,构建属于自己的测试庇护所,让代码质量成为晨跑时清新的空气,而不是雾霾中的忧虑。让我们一起摆脱手动测试的繁琐枷锁,拥抱自动化带来的自由吧!
|
27天前
|
JSON 前端开发 API
使用Python和Flask构建简易Web API
使用Python和Flask构建简易Web API
|
28天前
|
缓存 API 数据库
Python哪个框架合适开发速卖通商品详情api?
在跨境电商平台速卖通的商品详情数据获取与整合中,Python 语言及其多种框架(如 Flask、Django、Tornado 和 FastAPI)提供了高效解决方案。Flask 简洁灵活,适合快速开发;Django 功能全面,适用于大型项目;Tornado 性能卓越,擅长处理高并发;FastAPI 结合类型提示和异步编程,开发体验优秀。选择合适的框架需综合考虑项目规模、性能要求和团队技术栈。
26 2
|
2月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
158 3
|
1月前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
171 45
|
15天前
|
前端开发 安全 JavaScript
2025年,Web3开发学习路线全指南
本文提供了一条针对Dapp应用开发的学习路线,涵盖了Web3领域的重要技术栈,如区块链基础、以太坊技术、Solidity编程、智能合约开发及安全、web3.js和ethers.js库的使用、Truffle框架等。文章首先分析了国内区块链企业的技术需求,随后详细介绍了每个技术点的学习资源和方法,旨在帮助初学者系统地掌握Dapp开发所需的知识和技能。
2025年,Web3开发学习路线全指南
|
22天前
|
存储 前端开发 JavaScript
如何在项目中高效地进行 Web 组件化开发
高效地进行 Web 组件化开发需要从多个方面入手,通过明确目标、合理规划、规范开发、加强测试等一系列措施,实现组件的高效管理和利用,从而提高项目的整体开发效率和质量,为用户提供更好的体验。
27 7
|
26天前
|
开发框架 搜索推荐 数据可视化
Django框架适合开发哪种类型的Web应用程序?
Django 框架凭借其强大的功能、稳定性和可扩展性,几乎可以适应各种类型的 Web 应用程序开发需求。无论是简单的网站还是复杂的企业级系统,Django 都能提供可靠的支持,帮助开发者快速构建高质量的应用。同时,其活跃的社区和丰富的资源也为开发者在项目实施过程中提供了有力的保障。
下一篇
DataWorks