python轻量级web框架 flask

2023-11-19

一、flask介绍


1.flask的构成


Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask使用 BSD授权。
Flask也被称为 “microframework” ,因为它使用简单的核心,用 extension 增加其他功能。Flask没有默认使用的数据库、窗体验证工具。


2.使用flask框架的原因


Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。它可以很好地结合MVC模式进行开发,开发人员分工合作,小型团队在短时间内就可以完成功能丰富的中小型网站或Web服务的实现。另外,Flask还有很强的定制性,用户可以根据自己的需求来添加相应的功能,在保持核心功能简单的同时实现功能的丰富与扩展,其强大的插件库可以让用户实现个性化的网站定制,开发出功能强大的网站。


3.flask的优点


Flask旨在保持代码简洁且易于扩展,Flask框架的主要特征是核心构成比较简单,但具有很强的扩展性和兼容性,程序员可以使用Python语言快速实现一个网站或Web服务。一般情况下,它不会指定数据库和模板引擎等对象,用户可以根据需要自己选择各种数据库。Flask自身不会提供表单验证功能,在项目实施过程中可以自由配置,从而为应用程序开发提供数据库抽象层基础组件,支持进行表单数据合法性验证、文件上传处理、用户身份认证和数据库集成等功能。


4.flask构成部分的介绍


Flask主要包括Werkzeug和Jinja2两个核心函数库,它们分别负责业务处理和安全方面的功能,这些基础函数为web项目开发过程提供了丰富的基础组件。
Werkzeug(负责业务处理)库十分强大,功能比较完善,支持URL路由请求集成,一次可以响应多个用户的访问请求;支持Cookie和会话管理,通过身份缓存数据建立长久连接关系,并提高用户访问速度;支持交互式Javascript调试,提高用户体验;可以处理HTTP基本事务,快速响应客户端推送过来的访问请求。
Jinja2(安全方面)库支持自动HTML转移功能,能够很好控制外部黑客的脚本攻击。系统运行速度很快,页面加载过程会将源码进行编译形成python字节码,从而实现模板的高效运行;模板继承机制可以对模板内容进行修改和维护,为不同需求的用户提供相应的模板。


5.flask特点


目前,我国市场上大部分智能交通系统控制平台采用的都是C/S模式,对终端要求较高,且安装繁琐。部分的平台也有采用基于B/S模式传统框架,但这些框架的一些功能大多被固定,缺乏灵活性。采用Flask微型框架做服务器的后台开发,Flask是基于Python开发的框架,类似的框架还有Django、Tornado等,之所选择Flask来开发,原因如下:
后续的基于机器学习的车辆检测与属性识别算法研究,主要开发语言也是应用Python,整个系统统一开发语言,便于开发和后期维护。
Flask因为灵活、轻便且高效的特点被业界认可,同时拥有基于Werkzeug、Jinja2等一些开源库,拥有内置服务器和单元测试,适配RESTful,支持安全的cookies,而且官方文档完整,便于学习掌握。
Flask中拥有灵活的Jinja2模板引擎,提高了前端代码的复用率。这样可以提高开发效率和有利于后期开发与维护。在现有标准中,Flask算是微小型框架。Flask有两个主要依赖:路由、调试和Web服务器网关接口(WebServerGatewayInterface,WSGI)子系统由Werkzeug提供;模板系统由Jinja2提供。Werkzeug和Jinja2都是由Flask的核心开发者开发而成。对于数据库访问、验证Web表单和用户身份认证等一系列功能,Flask框架是不支持的。这些功能都是以扩展组件的方式进行实现,然后再与Flask框架集成。开发者可以根据项目的需求进行相应的扩展,或者自行开发。这与大型框架恰恰相反,大型框架本身做出了大部分决定,难以灵活改变方案。


6.flask的基本模式


Flask的基本模式为在程序里将一个视图函数分配给一个URL,每当用户访问这个URL时,系统就会执行给该URL分配好的视图函数,获取函数的返回值并将其显示到浏览器上,其工作过程见图。
在这里插入图片描述


7.使用的flask版本


使用flask==1.1.1


8.flask提供了什么


  • flask只能够完成最简单的请求响应
  • jinja2 模板系统
  • werkzeug 工具箱(wsgi)
  • 插件

二、开始flask旅程


1. 创建虚拟环境


新建一个文件夹,在里面打开cmd命令

conda create -n FlaskPath python==3.5.2
启动虚拟环境
activate FlaskPath

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


2. 安装flask


pip install flask==1.1.1

安装版本小技巧:不知道安装哪个版本,可以查看已有版本号;例如:

pip install flask==5  ## 后面的版本号尽量往大了写

在这里插入图片描述
给我们安装的包
在这里插入图片描述


3. 使用flask


基本语法
在这里插入图片描述
在shell启动py文件进行查看

python hello.py
默认在5000端口

在这里插入图片描述
修改启动端口号为8000,开启debug模式
在这里插入图片描述


4. flask()参数


flask的源文件
在这里插入图片描述

flask源文件参数 含义
import_name 应用程序包的名称; Flask程序所在的目录,所在的包位置,传 name , 决定了 flask静态文件,模板文件的寻找地址
static_url_path=None static路由地址,默认为空,可以修改为指定路由地址 ;可用于为web上的静态文件指定不同的路径。默认为static_folder文件夹的名称
static_folder=“static” static目录名,默认为static,可以修改
static_host 添加静态路由时使用的主机。默认为None。在配置static_folder时使用host_matching=True是必需的
host_matching 设置url_map。host_matching属性。默认值为False
subdomain_matching 在匹配路由时,考虑相对于SERVER_NAME的子域。默认值为False
template_folder 包含应用程序应该使用的模板的文件夹。默认设置为应用程序根路径中的“templates”文件夹
instance_path 应用程序的另一个实例路径。默认情况下,包或模块旁边的文件夹‘instance’被认为是实例路径
instance_relative_config 如果将用于加载配置的相对文件名设置为True,则假定该配置相对于实例路径而不是应用程序根目录
root_path 默认情况下,Flask将自动计算到应用程序根目录的路径。在某些情况下,这是无法实现的(例如,如果包是python3命名空间包),需要手动定义。
  • import_name

    • Flask程序所在的目录,所在的包位置,传 name
    • 决定了 flask静态文件,模板文件的寻找地址
  • static_url_path

    • 静态文件的访问地址,可以不传,默认为 / + static_folder
      在这里插入图片描述
  • static_folder

    • 静态文件的目录,可以不传,默认为static
      在这里插入图片描述
  • template_folder

    • 模板文件的存储位置,可以不传,默认为 templates
      在这里插入图片描述

5. 路由


① flask中的路由跟django中的路由的区别


django中使用路由: urls.py path("/",视图)
然后再在视图中写def index()

flask路由 直接在py文件中 使用装饰器

  • @app.route(’/index/’)
  • def index():

② flask中路由的注意事项及路由的写法


  • 写路由 需要注意:
  1. url应该以/ 开头
  2. url写法 标准的是 / /
    在这里插入图片描述
  3. 视图函数不能重名
  4. 习惯: 将视图函数的名字命名为 路由的名字

③ 路由传参


1. 转换器语法 <>

<> 叫转换器语法 默认为string类型,

  • 路由中使用了
  • 视图中增加参数 username
  • 类型:
    • string 默认类型
    • int 整形
    • float
      在这里插入图片描述

2. path: 包含斜杠的路径,通常用于路径的拼接

在这里插入图片描述


3. uuid:通用唯一识别码

在这里插入图片描述
路由后面传的参数id为:例如uuid4()所对应的一串

uuid4随机数
在这里插入图片描述


④ flask请求


在django中

django 
## 查看请求方式
request.method
## 获取请求中的内容所对应的值
request.GET.get()
request.POST.get()

1.flask get请求

第一步:导包

from flask import request

默认支持get请求

获取get请求的参数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


2. flask post请求

报错405,
原因:没有给其增加请求方式

在这里插入图片描述
flask 默认不支持post请求
解决:增加请求方式

在这里插入图片描述
获取post请求参数
在这里插入图片描述
如果要在一个视图函数中实现多个请求方式可以在请求方式中添加需要实现的请求
在这里插入图片描述


6. flask中request的一些方法


 from flask import request
  • 请求上下文
request中的一些方法 作用
args 获取get请求的参数
form 获取post请求的参数
cookies 获取cookie
method 获取请求方式 GET POST
url 获取请求url地址
file 获取请求上传的文件
headers 请求报文的头

7. 静态文件


django—》 配置settings中增加 static目录位置

flask中使用静态文件

在flask启动文件的同目录创建static目录,可以通过修改Flask参数修改 static目录
在这里插入图片描述


8. 模板(变量传递的方法)


在脚本文件同级目录创建 templates目录,可以通过修改Flask参数改变模板文件的目录
flask使用的 jinja2 的模板系统

  • 调用静态模板
    • render_template(“html”)
  • 传递数据
    • 变量的传递的第一种方法
      在这里插入图片描述
    • 变量传递第二种方法
      在这里插入图片描述
    • 变量传递第三种方法
      • **locals()
        在这里插入图片描述

① 模板语法


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>我是templates</h1>
    <hr>
    <h2>变量的使用</h2>
    {{ name }} {{ age }}
    <hr>
    <h2>字符串处理方法</h2>
    {{ name.capitalize() }}
    <br>
    {{ name.upper() }}
    <br>
    {{ name.replace("e","###") }}
    <hr>
    {{ name.1 }} <!--取字符串中索引为1的第二个-->
    <br>
    {{ name + "再见" }}
    <br>
    {{ name.split("l") }}
    <hr>
    <h2>jinja2循环</h2>
    {% for one in name %}
        {{one}}<br>
    {% endfor%}
    <hr>
    <h2>jinja2判断</h2>
    {% if name == "hello"%}
        {{name}}
    {% else %}
        <span>没有名字</span>
    {% endif %}
    <hr>
    {{ mydict.get("yuwen") }}
    {{ mydict.shuxue }}
    {{ mydict['shuxue'] }}
    <br>
{% for key,value in mydict.items() %}
    {{key}}:{{value}}
{% endfor %}
    <img src="/static/lang.jpg" alt="">

</body>
</html>

在这里插入图片描述


9. 模板继承


与django一样

base.html

	{% block title %}  {%endblock%}

子页面

	{% extends "base.html"%}

	{% block title %} 子页面{%endblock%}



base页面    提取公共部分 ,修改静态文件位置,增加block


10. 启动配置项说明


在这里插入图片描述

启动配置项 介绍
host 主机ip
port 端口号,默认5000
debug debug模式,True代表了开启debug模式,可显示错误,修改代码后自动重启项目

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python轻量级web框架 flask 的相关文章

  • 使用Jenkins+Gitlab集成Flutter自动化打包(Android),并发布到蒲公英

    本文记录一下使用Jenkins Gitlab集成Flutter自动化打包的过程 在集成时 Jenkins和Gitlab是已经搭建好的 并且Gitlab上已经上传了Flutter项目 Jenkins自动构建打包 安装Gitlab插件 因为Je
  • Js 关于收藏本页和设置首页

  • 交换机二三层转发原理简单总结

    首先二层转发是基于MAC地址转发 三层转发基于IP地址转发 但是这并不意味着仅仅依靠IP地址就能转发 三层转发是建立在二层的基础上的 而仅仅依靠MAC地址是能够转发的 另外 由于二三层转发基于MAC地址 IP地址 FDB表 MAC地址学习
  • 2019年感:忆往昔考博岁月,看今朝花样年华

    人生的际遇谁又能说清楚 就像师范类毕业的女神梦想着当一名老师 结果却阴差阳错穿上了警服 而本应该奔波北上广深的程序员 却成为了一名大学老师 两条平行线的男女 却结为了连理 再如 一心准备中科院却因英语差一分惜败 几乎裸考的学校却可能结出果实
  • 多模态预训练模型CLIP:中文版本开放使用

    公众号原文 关注公众号 获取一手论文咨询 多模态预训练模型CLIP 中文版本开放使用 中文项目地址 https github com real brilliant chinese clip in tensorflow 01 背景 CLIP是
  • 【车联网原型系统|四】adhoc组网+frp内网穿透

    物联网原型系统导航 车联网原型系统 一 项目介绍 需求分析 概要设计 https blog csdn net weixin 46291251 article details 125807297 车联网原型系统 二 数据库 应用层协议设计 h
  • 【Python三大结构练习4】

    目录 1 哥德巴赫猜想 2 判断是否回文 3 Add ings 4 身份证号掩盖出生日期 5 敏感词过滤 1 哥德巴赫猜想 题目描述 一个大正偶数总可以分解为两个质数之和 试编写程序验证哥德巴赫猜想 输入一个正偶数 输出该偶数的质数和分解
  • 使用 Spring 2.5 注释驱动的 IoC 功能

    基于注释 Annotation 的配置有越来越流行的趋势 Spring 2 5 顺应这种趋势 提供了完全基于注释配置 Bean 装配 Bean 的功能 您可以使用基于注释的 Spring IoC 替换原来基于 XML 的配置 本文通过实例详
  • Selenium脚本转化Java代码

    Selenium录制的脚本可以转换Java JUnit单元测试 可以使用Java项目管理工具Maven统一运行 从Selenium脚本中导出Java代码 按照如下步骤 使用Java运行Selenium脚本 使用Chome导出Java脚本必须
  • iframe与vue

    iframe与vue 在vue中使用 创建一个vue页面 iframe的src属性绑定需要的页面 放在template中 在iframe种调用vue的方法 a页面url为a demo com a页面中iframe引用的b页面url为b de
  • laravel8框架-开发实战项目总结(一)

    一 laravel框架的目录结构 app 应用目录 保存项目中的控制器 模型等 bootstrap 保存框架启动的相关文件 config 配置文件目录 database 数据库迁移文件和数据填充文件 public 应用入口文件index p
  • JAVA8 String 面试练习 与 intern()

    idea debug 查看内存信息 public class StringTest4 public static void main String args System out println 2293 System out printl
  • 深入浅出 - 公钥、私钥和数字签名最通俗的理解

    一 公钥加密 假设一下 我找了两个数字 一个是1 一个是2 我喜欢2这个数字 就保留起来 不告诉你们 私钥 然后我告诉大家 1是我的公钥 我有一个文件 不能让别人看 我就用1加密了 别人找到了这个文件 但是他不知道2就是解密的私钥啊 所以他
  • live-server的使用

    本地开发常常需要搭建临时的服务 第一时间我们会想到用http server 但现在流行修改文件浏览器自动刷新hot socketing 热拔插 如live reload 若想浏览器自动打开项目 用opener 现在live server实现
  • 国密SM2 Https服务器搭建--全网最完整方案

    在密码协议层面 国密标准定义了sm2密钥交换协议 IPSec技术规范 SSL 技术规范三个密码协议 在实际应用系统中为保障系统完整性 保密性 不可抵赖性三方面 应采用规范协议实现安全性保障 不要采用自定义密码协议 本文通过江南天安开源国密o
  • java实现将整数转化为中文大写金额

    转载请注明出处 http blog csdn net xiaojimanman article details 49584567 http www llwjy com blogdetail 741867855ccfe191504c83b3d
  • windows修改远程端口

    windows修改远程端口 一 修改注册表 关于远程桌面的注册表的位置 由于系统版本的不同 文件存在的位置也不同 核心是寻找名称类似CurrentControlSet的目录下的PortNumber文件 其是远程桌面端口的端口配置 1 按 w
  • golang: Logrus实现日志打印

    Github https github com sirupsen logrus golang标准库的日志框架非常简单 仅仅提供了print panic和fatal三个函数 对于更精细的日志级别 日志文件分割以及日志分发等方面并没有提供支持
  • VisualStudio—Remote Debug

    主要用来解决本地调试没问题发布到远端后却报错的项目 一 Windows Debug Windows 本文叙述采用的VS2022 远端 windows服务器 安装远程调试器 远端 windows服务器 安装过程省略 详见官方参考链接中设置远程

随机推荐