Flask框架后续内容(构建简单的应用)

这一篇主要写一些Controler的内容,包括Flask请求类和响应类,以及cookie和Session对象,View啊,模板继承,消息闪现,还有操作数据库等。

1,Flask请求

1,Request请求对象

Request请求对象封装了从客户端发来的请求报文,从中可以获取请求报文中的所有数据。请求解析和响应封装很多时候是由Werkzeug完成的,下面是一些request对象的属性和方法。

属性

  1. method(方法) :HTTP请求方法,如GET、POST、PUT、DELETE等。
  2. url(URL) :请求的URL地址,包括协议、主机名、端口、路径和查询参数等信息。
  3. headers(标头) :包含HTTP请求头的对象,可以访问和修改请求头信息。
  4. body(主体) :请求主体数据,通常是POST请求中的表单数据、JSON数据或文件上传数据。
  5. params(参数) :URL查询参数的对象,允许访问和修改查询参数。
  6. cookies(Cookie) :请求中的Cookie信息,可以用于处理用户的会话状态。
  7. session(会话) :如果使用会话管理,可以访问会话数据。
  8. remote_addr(远程地址) :客户端的IP地址。
  9. user_agent(用户代理) :客户端的用户代理字符串,用于识别浏览器或客户端设备信息。
  10. content_type(内容类型) :请求主体的内容类型,通常用于指示请求主体是JSON、XML、表单等数据格式。

方法

  1. get() :用于获取请求参数的值,例如request.get("param_name")用于获取查询参数的值。
  2. json() :用于解析请求主体中的JSON数据,以便访问JSON对象。
  3. formPOST :用于获取POST请求中的表单数据,例如request.form["field_name"]
  4. files:用于处理文件上传,允许访问上传的文件和相关信息。
  5. cookies :用于获取和设置Cookie信息,例如request.cookies["cookie_name"]
  6. headers :用于访问请求头信息,例如request.headers["header_name"]
  7. url :用于访问请求的URL信息,例如request.url
  8. method :用于获取请求的HTTP方法,例如request.method
  9. is_secure() :检查请求是否使用了安全的HTTPS协议。
  10. is_ajax() :检查请求是否是通过Ajax发送的。 tedboy.github.io/flask/gener...

1,获取get请求参数

request.args.get('age')从url中获取年龄

2,获取post参数

request.args.post() 表单的话使用request.form['username']

3,文件上传

前端内容由前端程序员编写,后端程序需要判断文件是否上传,已经上传的文件类型是否符合设定的要求,出于安全考虑,还需要防止恶意用户在文件名中嵌入代码,给文件设置一个随机不重复的文件名,uuid_uuid4()可以做到。

2,请求狗子

主要是对请求进行预处理和后处理,执行在视图前后的一些函数,用户可以在这些函数里面进行操作。 juejin.cn/post/703095...

3,Flask响应

1,Response响应对象

响应在Flask中使用Response对象表示,响应报文的大部分内容有服务器处理,大多数情况下值负责返回主体内容。

视图函数最多返回由3个元素组成的元组:响应主体,状态码和首部字段。 juejin.cn/post/710578...

2,响应格式

1,MIME

在http响应中,数据通过多种格式传输。大多数情况下使用HTML格式。不同的响应格式需要设置不同的MIME类型,MIME在首部的Content-Type字段定义。默认的HTML类型是 Content-Type:text/html;charset=utf-8 MIME类型如下:

  1. 纯文本: text/plain
  2. HTML: text/html
  3. XML: application/xml
  4. JSON: application/json
2, json

JSON是Javascript Object Notation(JavaScript对象表示法),是一种流行的、轻量的数据交换格式。XML具有高效的重用性,但体积较大,处理和解析的速度较慢。JSON轻量简洁,容易阅读和解析,兼容性也较好。类似于python的字典和列表。在flask中可以直接使用jsonify()函数来进行序列化,转化成JSON字符串作为响应主体,生成一个响应对象,并且设置正确的MIME类型。

4,Cookie和Session

juejin.cn/post/698285...

5,模板上下文

docs.jinkan.org/docs/jinja2... 这是官方文档中文版的,主要看一下过滤器和自定义过滤器,局部模板,模板继承,消息闪现

6,消息闪现

flash(message,category)第二个参数是消息类型

使用flash函数发送的消息会存储在session中,需要在模板中使用全局函数get_flashed_messages()获取消息列表,来显示出来。

7,自定义错误页面

主要是使用错误处理函数加app.errorhandler()装饰器,出入错误代码作为参数。 例如

python 复制代码
@app.errorhandler(404)
def page_not_found(e):
    return reder_template('404.html'),404

使用Flask-SQLAlchemy管理数据库

1,连接数据库服务器

DBMS通常会提供数据库服务器运行在操作系统中。丽娜姐数据库要指定数据库URI(统一资源标识符)。数据库URI是一串包含各种属性的字符串。

数据库引擎 URI
MySQL mysql://username:password@hostname/database
SQLite(Unix) sqlite:////absolute/path/database
SQLite(Windows) sqlite:///c:/absolute/path/database

示例连接 SQLALCHEMY_DATABASE_URI='mysql+pymysql://root:root@localhost/mrsoft?charset=utf8mb4'

2,定义数据模型

数据模型是数据特征的抽象,它从抽象层次上描述了系统的静态特征,动态行为和约束条件,为数据库系统的信息表示和操作提供了一个抽象的框架。在ORM中模型是一个Python类,类的属性对应数据库表的列。

python 复制代码
class Role(db.Model):
    __tablename__='roles'
    id = db.Column(db.Integer,primary_key=True)
    name = db.Column(db.String(64),unique=True)
    def __repr__(self):
        return '<Role %r>'%self.name

常用的列字段类型,关系选项,列选项,其他的请参考官方文档en.wikipedia.org/wiki/SQLAlc... blog.csdn.net/chichu261/a...

3,定义关系

例如,一个用户user可以对于一个role,一个role可以分配多个user,所有是一对多关系,在user表中设置外键引用role表的主键。

js 复制代码
class Role(db.Model):
    #...
    users = db.relationship("User",backref="role",lazy="dynamic")
    
class User(UserMixin,db.Model):
#...
    role_id = db.Column(db.Integer,db.ForeignKey('roles.id'))

多对多关系需要在关联表中指定名称 还得创建一个中间表用外键进行连接。

4,数据库操作

CRUE。创建,更新,读取和删除

1,创建数据

1,创建对象 2,将其添加到会话中 3,提交会话

2,读取数据

<模型块>.query.<过滤方法>.<查询方法>

常用的SQLAlchemy查询过滤器

过滤器 说明
filter() 把过滤器添加到原查询上,返回一个新查询
filter_by() 把等值过滤器添加到原查询上,返回一个新查询
limit 使用指定的值限定原查询返回的结果
offset() 偏移原查询返回的结果,返回一个新查询
order_by() 根据指定条件对原查询结果进行排序,返回一个新查询
group_by() 根据指定条件对原查询结果进行分组,返回一个新查询

常用的SQLAlchemy查询执行器

方法 说明
all() 以列表形式返回查询的所有结果
first() 返回查询的第一个结果,如果未查到,返回None
first_or_404() 返回查询的第一个结果,如果未查到,返回404
get() 返回指定主键对应的行,如不存在,返回None
get_or_404() 返回指定主键对应的行,如不存在,返回404
count() 返回查询结果的数量
paginate() 返回一个Paginate对象,它包含指定范围内的结果

3,更新数据

去模型类,然后直接赋值给类字段属性,提交会话即可。懒得写了

3,删除数据

会话中用delete函数就行了。
相关推荐
2401_882727571 小时前
低代码配置式组态软件-BY组态
前端·后端·物联网·低代码·前端框架
追逐时光者2 小时前
.NET 在 Visual Studio 中的高效编程技巧集
后端·.net·visual studio
大梦百万秋2 小时前
Spring Boot实战:构建一个简单的RESTful API
spring boot·后端·restful
斌斌_____3 小时前
Spring Boot 配置文件的加载顺序
java·spring boot·后端
路在脚下@3 小时前
Spring如何处理循环依赖
java·后端·spring
海绵波波1074 小时前
flask后端开发(1):第一个Flask项目
后端·python·flask
小奏技术5 小时前
RocketMQ结合源码告诉你消息量大为啥不需要手动压缩消息
后端·消息队列
AI人H哥会Java6 小时前
【Spring】控制反转(IoC)与依赖注入(DI)—IoC容器在系统中的位置
java·开发语言·spring boot·后端·spring
凡人的AI工具箱6 小时前
每天40分玩转Django:Django表单集
开发语言·数据库·后端·python·缓存·django
奔跑草-7 小时前
【数据库】SQL应该如何针对数据倾斜问题进行优化
数据库·后端·sql·ubuntu