【python】Flask的基本应用

news2024/12/28 6:50:53

目录

 

一、介绍

二、与Django相比

 三、基本使用

3.1入门案例:

3.2路由定义

3.3变量路由

3.4渲染模块

3.5重定向

3.6Flask返回json数据

3.7Flask模板的使用

 


 

一、介绍

Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器

二、与Django相比

  • Django:
  • 无socket,依赖第三方模块wsgi,中间件,路由系统(CBV,FBV),视图函数,ORM,cookie,session,Admin,Form,缓存,信号,序列化
  • Flask:
  • 无socket,中间件(需要扩展),路由系统,视图(CBV)、第三方模块(依赖jinja2),cookie,session弱爆

 三、基本使用

通过pip3安装Flask即可:

pip3 install flask

3.1入门案例:

from flask import Flask
app = Flask(__name__)
 
@app.route('/')
def hello_world():
    return 'Hello World!'
 
if __name__ == '__main__':
    app.run()

app=Flask(name)用来实例化对象

@app.route('')来写接口

执行完后app.run()来执行

3.2路由定义

@app.route('/hello')
def hello():
    return 'hello world'
@app.route('/hi')
def hi():
   return 'hi hi'
@app.route('/hello'methods=['GET'"POST'])
def hello():
    return 'hello world
@app.route('/hi',methods=['POST'])
def hi():
   return 'hi hi

可以指定"get"或"post"方式。

**添加路由关系的本质:**将url和视图函数封装成一个Rule对象,添加到Flask的url_map字段中

3.3变量路由

@app.route('/user/<id>')
def index(id):
    if id =='1'
       return 'python'
    if id == str(2):
       return 'django'
    if int(id) == 3:
       return 'flask'
    return 'hello world'

3.4渲染模块

from flask import Flask,render_template
import config
app=Flask(__name__)
app.config.from_object(config)  #此为配置防止中文乱码的代码
@app.route('/about')
def about():
    return render_template("about.html")

if __name__ == '__main__':
    app.run(debug=True)

html页面如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>关于我们</title>
</head>
<body>
    <h1>我们是最棒的</h1>
</body>
</html>

把python变量传入前端模板中

想要传递变量到模板中,可以把变量定义成字典,然后在render_template中,通过关键字参数的方式传递过去,render_template(“模板名称”,**context)

from flask import Flask,render_template
import config
app=Flask(__name__)
app.config.from_object(config)
@app.route('/about')
def about():
    context={
        "username":"李四"
    }
    return render_template("about.html",**context)

if __name__ == '__main__':
    app.run(debug=True)

html页面代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>关于我们</title>
</head>
<body>
    <h1>我们是最棒的。{{username}}</h1>
</body>
</html>

 模板过滤器

过滤器就是通过管道符( | )进行使用的,例如{{name|length}}就会返回name的长度,过滤器相当于是一个函数,把当前的变量传入到过滤器中,然后过滤器根据自己的功能,再返回相应的值,之后再将结果渲染到页面中。

案例:

from flask import Flask,render_template
import config
app=Flask(__name__)
app.config.from_object(config)
@app.route('/about')
def about():
    context={
        "username":"lisi",
        "books":["红楼梦","西游记"]
    }
    return render_template("about.html",**context)

if __name__ == '__main__':
    app.run(debug=True)

html页面代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>关于我们</title>
</head>
<body>
    <h1>我们是最棒的。{{username|length}}</h1>
    <h1>{{books}}</h1>
    <h1>{{books|join(",")}}</h1>
</body>
</html>

模板过滤器的控制语句

所有的控制语句都是放在{%…%}中,并且由{% endxx %}来进行结束,Jinja中常用的控制语句有if和for…in…

if举例:

from flask import Flask,render_template
import config
app=Flask(__name__)
app.config.from_object(config)
@app.route("/control")
def control():
    context={
        "age":17,
    }
    return render_template("control.html",**context)
if __name__ == '__main__':
    app.run(debug=True)

 html页面如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>控制语句</title>
</head>
<body>
{% if age > 18%}
    <div>您已成年!</div>
{% elif age < 18%}
    <div>您未成年!</div>
{% else %}
    <div>您刚成年!</div>
{% endif %}
</body>
</html>

 效果:

b59f471ef19843c1929925c82a8f1344.png

 for...in...举例:

from flask import Flask,render_template
import config
app=Flask(__name__)
app.config.from_object(config)
@app.route("/control")
def control():
    context={
        "books":["红楼梦","西游记","水浒传","三国演义"]
    }
    return render_template("control.html",**context)
if __name__ == '__main__':
    app.run(debug=True)

 html页面如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>控制语句</title>
</head>
<body>
<ul>
{% for book in books %}
    <li>{{book}}</li>
{% endfor %}
</ul>
</body>
</html>

效果如图:

a515900493a24fb28b144a46ffd93a76.png

 

 循环字典


def control():
    context={
        "person":{"name":"liyu","age":18}
    }
    return render_template("control.html",**context)

html页面如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>控制语句</title>
</head>
<body>
{% for key,value in person.items() %}
    <div>{{key}}:{{value}}</div>
{% endfor %}
</body>
</html>

 效果如图:

408c345190364668a1c932a606078e61.png

 

3.5重定向

from flask import Flask,redirect
app = Flask(__name__)
@app.route('/index')
def index():
    return redirect('https://www.baidu.com')


if __name_- == '__main__"
app.run()

访问index然后自动转到百度的网址

3.6Flask返回json数据

from flask import Flask
import json

app = Flask(__name__)

@app.route("/index")
def index():
    # 返回json数据的方法
    data = {
        "name":"zhangsan",
        "age":18
    }
    # 第一种
    response = json.dumps(data)  # 将python的字典转换为json字符串
    return response,200,{"Content-Type":"application/json"}

if __name__ == '__main__':
    app.run(debug = True,port=5000)

3.7Flask模板的使用

使用 render_template() 方法可以渲染模板,你只要提供模板名称和需要 作为参数传递给模板的变量就行了。
Flask 会在 templates 文件夹内寻找模板。因此,如果你的应用是一个模块, 那么模板文件夹应该在模块旁边;如果是一个包,那么就应该在包里面:

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    my_int = 18
    my_str = 'curry'
    my_list = [1, 5, 4, 3, 2]
    my_dict = {
        'name': 'durant',
        'age': 28
    }

    # render_template方法:渲染模板
    # 参数1: 模板名称  参数n: 传到模板里的数据
    return render_template('hello.html',
                           my_int=my_int,
                           my_str=my_str,
                           my_list=my_list,
                           my_dict=my_dict)


if __name__ == '__main__':
    app.run(debug=True)

html页面如下:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>

<body>
  <h2>我是模板</h2>
  {{ my_int }}
  <br>
  {{ my_str }}
  <br>
  {{ my_list }}
  <br>
  {{ my_dict }}
  <hr>
  <h2>模板的list数据获取</h2>
  <hr>
  {{ my_list[0] }}
  <br>
  {{ my_list.1 }}
  <hr>
  <h2>字典数据获取</h2>
  <hr>
  {{ my_dict['name'] }}
  <br>
  {{ my_dict.age }}
  <hr>
  <h2>算术运算</h2>
  <br>
  {{ my_list.0 + 10 }}
  <br>
  {{ my_list[0] + my_list.1 }}
</body>

</html>

运行结果:

e79ced225a3f4588a7b5e14550d1d517.png

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/745054.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何通过会员系统实现线上线下贯通

​蚓链会员系统有一个整合的营销概念&#xff0c;优化线上和线下会员的投入比例&#xff0c;让消费者在每一个购物场景都能够获得满意的消费体验&#xff0c;大大的提升会员的留存和行为习惯养成&#xff0c;同时还能实现销售额与客户结构的提升。并将线上和线下的会员数据进行…

uni-app直播开发教程

第三方平台选型&#xff1a;腾讯、阿里、即构、声网 由于即构直播平台支持uni-app故本文章选用的是即构sdk版讲解 一、效果 二、sdk集成 1、 首先注册即构平台账号&#xff0c;然后对照即构官网一步步集成 主要分为sdk插件集成与JS 封装层集成这两部分&#xff0c;具体步骤请…

SLAM算法知识荟萃

文章目录 SLAM自动驾驶八股四元数在表示空间旋转时的优势是什么&#xff1f;介绍自动驾驶系统介绍回环检测介绍词袋模型 手撕对极约束使用OpenCV找到四边形的边界介绍卡尔曼滤波推导卡尔曼增益 介绍PnPPnP求解最少需要几个点PnP的误差来源 求解线性方程 AxbSVD和QR方法哪个快介…

The 2022 ICPC Asia Xian Regional Contest(C/E/F/G/J/L)

原题链接&#xff1a;Dashboard - The 2022 ICPC Asia Xian Regional Contest - Codeforces 目录 J. Strange Sum F. Hotel C. Clone Ranran G. Perfect Word E. Find Maximum L. Tree J. Strange Sum 题意&#xff1a;思路&#xff1a;当我们选择in时&#xff0c;我们则可以…

Django_获取api接口的传参

目录 当参数为form-data 或者x-www-form-urlencoded类型时&#xff0c;使用request.POST获取到参数 当参数为raw类型时&#xff0c;使用request.body获取到参数&#xff0c;获取的参数需要经过处理才能使用 源码等资料获取方法 当参数为form-data 或者x-www-form-urlencoded…

UE4 关闭steamvr自启动

在我们打开项目时&#xff0c;如果安装过steamvr会自动启动&#xff0c;因为steamvr插件是默认启用的&#xff0c;所以把引擎目录下的steamvr插件默认启动改为false就可以了 用记事本打开SteamVR.uplugin文件 把true改成false

Redshift有哪些硬件要求?不同项目的电脑配置推荐

当谈到使用 Redshift 这样的软件时&#xff0c;项目类型有很多种——从简单的低多边形资产到大片的整个城市景观。很难推荐一种适合所有需求的硬件配置。 因此&#xff0c;我们将介绍 Redshift 的一些常见项目类型&#xff0c;为每个特定项目级别提供硬件建议。通过将硬件与您的…

互联网医院平台定制|互联网医疗平台开发

互联网医院系统是指通过互联网技术与医疗服务相结合的一种新型医疗模式。相比传统医院&#xff0c;互联网医院系统具有许多功能优势&#xff0c;为患者和医生提供了更便捷、高效的医疗服务。以下是互联网医院系统的一些功能优势&#xff1a;   在线挂号与预约&#xff1a;互联…

Tomcat关闭日志输出

一般在部署Tomcat后&#xff0c;运行久了&#xff0c;catalina.out文件会越来越大&#xff0c;对系统的稳定造成了一定的影响。可通过修改conf/logging.properties日志配置文件来屏蔽掉这部分的日志信息。那么Tomcat怎么关闭日志输出 一、 linux 系统 1、直接修改catalina.sh…

虚拟化容器化与docker

虚拟化容器化与docker 基本概念虚拟化分类虚拟化实现主机虚拟化实现容器虚拟化实现命名空间namespace空间隔离 控制组群cgroup资源隔离 LXC(Linux Container) docker与虚拟机 基本概念 物理机&#xff1a; 实际的服务器或者计算机。相对于虚拟机而言的对实体计算机的称呼。物理…

Linux基础(一)Linux基础命令、vi/vim编辑器

目录 虚拟机快照 Linux命令 基础格式 ls命令 cd-pwd命令 创建目录mkdir命令 文件操作命令&#xff1a;touch、cat、more 文件操作命令&#xff1a;cp、mv、rm 查找命令&#xff1a;which、find grep、wc和管道符 echo、tail和重定向符 vi\vim编辑器 下载VM ware works…

低粉高播放!30万粉竟打造900万播放的B站恰饭

截至2023年第一季度&#xff0c;B站官方发布的财报显示&#xff0c;平台日均活跃用户达9370万&#xff0c;月均活跃用户3.15亿&#xff0c;用户的增长离不开UP主&#xff0c;UP主是构建B站内容多样性不可或缺的存在。 在B站14周年庆典上&#xff0c;陈睿就曾表示&#xff0c;2…

送你一瓶好运喷雾,2023BAT大厂最新Java热门面试题及答案总结

毕业后就在腾讯的高级程序员&#xff0c;由于种种原因&#xff0c;离职出来了。趁着金三银四的求职季&#xff0c;互联网大厂小厂面试了一圈&#xff0c;感觉都不太好&#xff0c; 最后只 收到了京东的录用通知。 简单分析了一下&#xff1a;一面二面hr面都挂过&#xff0c; 原…

智能轮廓仪在汽车行业(零部件)的应用

在汽车领域里的空调&#xff0c;发动机&#xff0c;车内循环系统&#xff0c;油料供给和制动系统中&#xff0c;多会引入螺杆类产品&#xff0c;其主要用于紧固密封连接。螺杆制造工艺的好坏直接关系到其部件的性能和使用寿命&#xff0c;因此需要对螺杆的形状和尺寸进行质量管…

MySQL 第六天作业 备份与还原以及操作索引和视图

一、备份与还原 创建数据库、表以及插入数据 CREATE DATABASE booksDB;use booksDB;CREATE TABLE books(bk_id INT NOT NULL PRIMARY KEY,bk_title VARCHAR(50) NOT NULL,copyright YEAR NOT NULL);INSERT INTO booksVALUES (11078, Learning MySQL, 2010),(11033, Study Ht…

postgrep 9.4 断电后启动不了

journalctl -xe1、问题1&#xff1a;pg_ctl: another server might be running pg_ctl: another server might be running 解决方法&#xff1a;删除原来没有删除的pid文件 rm /opt/PostgreSQL/9.4/data/postmaster.pid 2、问题2 postgres文件丢失 - Unit postgresql-9.4.ser…

在3dMax中保存或使用Corona渲染时发生崩溃?

尝试在3ds Max中保存、打开、合并或渲染文件时&#xff0c;Corona渲染引擎3ds Max崩溃。 使用Corona渲染时&#xff0c;在“虚拟帧缓冲区(VFB)”窗口打开时&#xff0c;会发生更多情况。 此外&#xff0c;渲染时可能会显示警告消息&#xff0c;显示以下Corona错误&#xff1a; …

DataSparkle为非洲数字经济研究提供数据支撑,助力中非合作

7月1日,在第三届中非经贸博览会举办期间,中非经贸合作研究院在中非经贸合作智库研讨会上发布了《非洲数字经济发展指数与中非数字经济合作报告(2023)》(以下简称《报告》)。《报告》系统分析了非洲数字经济的发展情况,并深入解读了中非数字经济合作的现状与机遇。传音移动互联旗…

深入剖析 JavaScript 数组和字符串的各种操作技巧

&#x1f642;博主&#xff1a;小猫娃来啦 &#x1f642;文章核心&#xff1a;深入剖析 JavaScript 数组和字符串的各种操作技巧 近日总结了一下js数组和字符串相关操作方法&#xff0c;今天输出一篇博客&#xff0c;进行前端有关数组字符串相关操作方法的汇总&#xff0c;以后…

为何学习嵌入式系统?嵌入式系统未来的优势是什么?

学习嵌入式系统有许多好处&#xff0c;并且它在未来有许多优势。以下是其中的一些原因&#xff1a; 广泛应用&#xff1a;嵌入式系统广泛应用于智能手机、汽车、家电、医疗设备、工业控制系统等各种设备和系统中。学习嵌入式系统可以让你参与开发和设计这些领域中的创新产品和技…