Flask基础04

响应

什么是响应
响应就是由服务器端带给客户端的内容,响应内容可以是字符串,模板,重定向

响应字符串

  1. 响应字符串 return '普通字符串'
  2. 响应模板
    return render_template('xxx.html')
    本质 还是响应字符串
  3. 响应对象
    响应对象: 将响应内容封装到一个对象中,以便完成更多的响应行为
    在Flask中,使用 make_response() 构建响应对象
from flask import make_response
@app.route('/xxx')
def xxx():
    # 返回对象
    resp = make_response('响应内容')
    # 返回字符串
    resp = make_response(render_template('.html'))
    # 允许调用resp中的属性或方法以便完成更多的响应行为
    return resp
  1. 重定向
    什么是重定向
    由服务器通知客户端重新向新的地址发送请求,状态码:302
    语法:
       from flask import redirect
       @app.route('/xx')
       def xxx():
        xxxx
        return redirect('重定向地址')

文件上传

注意问题
表单中如果有文件上传的话,必须遵循以下两个要求:

  1. 表单的提交方式 method 必须为 post
  2. 表单的 enctype 属性值必须为 multipart/form-data
    <form method='post' enctype='multipart/form-data'></form>

服务器端
获取上传文件
语法: request.files
作用: 获取上传的所有的文件
f = request.files['uimg']

从上传的文件中,将名称为 uimg 的文件获取出来并保存在 f 中
将文件保存到指定的目录处
语法: f.save('保存路径')
作用:将文件保存到指定目录处

注意:

  1. 保存路径可以是相对路径也可以是绝对路径
  2. 保存路径要精确到文件名称
  3. 保存的目录必须是已存在的
    ext:
    f.save('static/'+f.filename)
    f.filename: 能够获取出文件名

思考:
上传的文件,文件名称由 年月日时分秒. 扩展名 组成

   @app.route('/upload', methods=['POST', 'GET'])
   def file_upload():
       if request.method == 'GET':
           return render_template('file_upload.html')
       else:
           f = request.files.get('uimg')
           basedir = os.path.dirname(__file__)
           print(basedir)
           ftime = datetime.datetime.now().strftime('%Y%m%d%H%M%S%f')
           ext = f.filename.split('.')[1]
           filename = ftime + '.' + ext
           upload_path = os.path.join(basedir, 'static/upload', filename)
           f.save(upload_path)
           return 'Save Ok'

模型-Models

1.什么是模型 实体类 | 模型类 |

模型是根据数据库中表结构而创建出来的class,也就是将数据表进行‘类化’,以类(对象)的方式来操作数据表(数据库)。

数据库中的每一张表到编程语言中,就是一个class;

表中的每一个列对应到编程语言中就是class中的一个属性;

表中的每一条数据对应到编程语言中就是class的一个对象

实体完整性:保证数据不重复,利用主键实现

模型的框架

ORM: Object Relational Mapping 对象关系映射

ORM的优点

  • 封装了数据库中所有的操作,大大的提高了开发效率
  • 可以省略庞大的数据访问层,即便不用SQL编码也能完成对数据的CRUD的操作
ORM框架的三大特征

1. 数据表(Table)到编程类的 (Class)的映射
数据库中每一张表对应到编程语言中都有一个类
在ORM中:
允许将 数据表 自动 生成一个类
允许将 类 自动 生成一张数据表

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

3.关系映射
将数据库中表与表之间的关系 对应到编程语言中类与类之间的关系

数据库中表与表之间的关系:
一对一:
A表中的一条记录能够与B表中的一条记录相关联
B表中的一条记录能够与A表中的一条记录相关联
一对多:
A表中的一条记录能够与B表中的多条记录相关联
B表中的一条记录能够与A表中的一条记录相关联
多对多:
A表中的一条记录能够与B表中的多条记录相关联
B表中的一条记录能够与A表中的多条记录相关联
实现方式:
增加第三张关联表来实现多对多
内连接查询

select s.sname, c.cname from student as s
       inner join student_course as sc
       on s.id = sc.sid
       inner join course as c
       on sc.cid = c.id
       where c.cname = '钢管舞'

数据库可视化工具:

  1. Navicate for MySQL
  2. Power Designer: 强悍的数据库建模工具-ER(Entity Realtionship)能够生成数据库语句

Flask中的ORM框架

1.python 中的ORM

比较常用的ORM框架- SQLAlchemy

安装:sudo pip3 install SQLAlchemy

2.在Flask中

使用的也是 SQLAlchemy,但是需要安装 Flask-SQLAlchemt

安装:sudo pip3 install flask-sqlalchemy

在Flask中配置数据库

  1. 通过app(Flask应用实例)构建配置信息
app.config['SQLALCHEMY_DATABASE_URI']="mysql://用户名:密码@主机:端口/数据库"
app.config['SQLALCHEMY_DATABASE_URI']="mysql://root:123456@localhost:3306/flask"
创建数据库应用实例
  from flask_sqlalchemy import SQLAlchemy
  db = SQLAlchemy(app)
定义模型

语法:

class MODELNAME(db.Model):
    # 表名
    __tablename__ == 'TABLENAME'
    # 字段名
    COLUMN_NAME = db.Column(db.TYPE,OPTIONS)

MODELNAME: 定义的模型类的类名,通常参考表名
TABLENAME: 映射到数据库中表的名称
COLUMN_NAME: 属性名,映射到数据表中就是列名
TYPE: 映射到列的数据类型
OPTIONS: 列选项

db.TYPE 列的数据类型

类型名 python类型 说明
Integer int 普通整数,32位
SmallInteger int 小范围整数,16位
BigInteger long 不限精度的整数
Float float 浮点类型
Numeric decimal.Decimal 定点类型
String str 变长字符串
Text str 变长字符串
Boolean bool 0 | 1
Date datetime.date 日期
Time datetime.time 时间
DateTime datetime.datetime 日期和时间

OPTIONS 列选项

选项名 说明
primary_key 如果设置为True表示该列为主键
unique 如果设置为True表示该列的值唯一
index 如果设置为True表示该列要创建索引
nullable 如果设置为True表示该列允许为空,默认允许为空
default 指定该列的默认值
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356