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

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

欢迎关注https://xxetb.xetslk.com/s/2FTwAV
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
MySQLmysql://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函数就行了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值