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

2023年 10月 8日 55.7k 0

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

1,Flask请求

1,Request请求对象

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

属性

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

  • get() :用于获取请求参数的值,例如request.get("param_name")用于获取查询参数的值。
  • json() :用于解析请求主体中的JSON数据,以便访问JSON对象。
  • formPOST:用于获取POST请求中的表单数据,例如request.form["field_name"]
  • files:用于处理文件上传,允许访问上传的文件和相关信息。
  • cookies:用于获取和设置Cookie信息,例如request.cookies["cookie_name"]
  • headers:用于访问请求头信息,例如request.headers["header_name"]
  • url:用于访问请求的URL信息,例如request.url
  • method:用于获取请求的HTTP方法,例如request.method
  • is_secure() :检查请求是否使用了安全的HTTPS协议。
  • 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;
    MIME类型如下:

  • 纯文本: text/plain
  • HTML: text/html
  • XML: application/xml
  • 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()装饰器,出入错误代码作为参数。
    例如

    @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类,类的属性对应数据库表的列。

    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 ''%self.name
    

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

    3,定义关系

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

    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函数就行了。

    相关文章

    JavaScript2024新功能:Object.groupBy、正则表达式v标志
    PHP trim 函数对多字节字符的使用和限制
    新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
    使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
    为React 19做准备:WordPress 6.6用户指南
    如何删除WordPress中的所有评论

    发布评论