Flask初识

简介: Flask初识

Flask相对于Django是一个比较微小的服务器,是一个微服务Web框架,几行代码就能建一个简单地服务,如下代码。但并不是说他不如Django,flask就相当于毛坯房,里面很多东西都需要自己去装饰,所以定制化很强。而Django相当于精修的房子,能够直接领包入户,Django是比较繁重的。

一个简单地Flask服务器:

from flask import Flask
# 创建服务
app = Flask(__name__)
# 使用装饰器配置路由,当收到该路由请求时就会执行下面的函数
# 在Flask程序中使用路由我们称之为注册路由,是使用程序实例提供的app.route()装饰器注册路由,而括号内的字符串就是url,注册路由的过程就是完成了 url和python类或函数映射的过程,可以理解为会有一张表保存了url与python类或函数的对应关系。
@app.route("/")
def main():
    return "<h1>Hello WOrld</h1>"
if __name__ == "__main__":
    # 执行服务
    app.run()

常见的请求实现

  1. GET请求
    请求的参数放在了request.args内,使用request.args.get(‘参数名’)得到参数值
from flask import Flask, request, jsonify
# request是请求对象,是一个全局对象
# jsonify是将字典对象转为json的方法,使用json.dumps()同样可以
app = Flask(__name__)
# get请求实现
# http://127.0.0.1:5000/get?name=hxd&age=12
@app.route("/get", methods=['GET'])
def get_request():
    name = request.args.get('name')
    age = request.args.get('age')
    return jsonify({"name": name, "age": age})
if __name__ == "__main__":
    app.run()

POST请求

请求的数据放在request.from内, 使用dict(request.from)将其转为字典即可提取里面的值了

服务端:

from flask import Flask, request
# request是请求对象,是一个全局对象
# jsonify是将字典对象转为json的方法,使用json.dumps()同样可以
app = Flask(__name__)
# post方式实现
@app.route("/post", methods=['POST'])
def post_request():
    data = dict(request.form)
    values = request.values
    print(values)
    return data

客户端 :

import requests
import json
url = "http://127.0.0.1:5000/post"
data = {
    "name": "hxd",
    "age": "21"
}
data = requests.post(url=url, data=data).text
print(data)

Flask的模板和重定向

  1. 模板(render_templates)

前面我们返回给用户的只是一个简单地Hello World, 但是当我们需要返回跟更大的html代码就需要将html代码保存在文件里了,使用模板就是在用户请求时返回html文件


需要在服务根目录下创建一个templates文件夹,里面存放html文件


如:


在templates创建一个index.html文件,并写入如下内容

<html>
    <head>
        <title>Flask</title>
        <meta chaset="utf-8">
    </head>
    <body>
        <center>
            <h1>Flask Nb!</h1>
        </center>
    </body>
</html>

python代码

from falsk import Flask, render_template
app = Flask()
@app.route("/", methods=["GET"])
def mian():
    return render_template("index.html")
if __name__ == "__main__"

模板语言

  1. 变量
    后端:
@app.route("/",methods=('get','post'))
def test():
    name = "Flask"
    return render_template('index.html',name = name)

前端:

<html>
    <head>
        <title>模板语言</title>
        <meta chaset="utf-8">
    </head>
    <body>
        <h1>{{name}}, NB!</h1>
    </body>
</html>

流程控制

后端

dic = [{"name": "Python", "rank": 2}, {"name": "Java", "rank": 3}, {"name": "C", "rank": 1}]
@app.route("/rank")
def rank():
    return render_template("rank.html", dic=dic)

前端 :

<html>
    <head>
        <title>模板语言</title>
        <meta chaset="utf-8">
    </head>
    <body>
        <table>
            <tr>
                <th>语言</th>
                <th>排行</th>
            </tr>
            {% for name, rank in dic.items() %}
            <tr>
                <td>{{name}}</td>
                <td>{{rank}}</td>
            </tr>
            {% endif %}
            //
        </table>
    </body>
</html>

在for循环内你可以访问这些变量:


loop.index 当前循环迭代的次数(从 1 开始)

loop.index0 当前循环迭代的次数(从 0 开始)

loop.revindex 到循环结束需要迭代的次数(从 1 开始)

loop.revindex0 到循环结束需要迭代的次数(从 0 开始)

loop.first 如果是第一次迭代,为 True

loop.last 如果是最后一次迭代,为 True)

loop.length 序列中的项目数

loop.cycle 在一串序列间期取值的辅助函数

if判断

{% if dic[1].name == python %}
   <h2>第一个语言是python</h2>
{% elif dic[1].rank == 1 %}
   <h2>第一个显示的语言排名是第一名</h2>
{% else %}
   <h2>第一个显示的语言既不是python,也不排第一</h2>
{% endif %}

防止xss攻击

Flask有防止xss攻击的措施,所以你传递的参数如果是html代码就不会正常显示,所以需要做以下措施

后端:

from flask import Markup  # 导入 flask 中的 Markup 模块
tag = Markup('<h1>伟大诞生自平凡</h1>') # 然后再讲tag作为参数传递给前端使用

前端:

{{tag | safe}}  # 加上管道符 |safe


重定向(redirect)

可以将一个路由重定向到另一个路由,比如我们在登录时,输入的密码错误,这是服务器应该重定向到登录界面,但输入的密码正确,我们就重定向到个人首页。

from falsk import Flask, redirect
app = Flask()
@app.route("/", methods=["GET"])
def mian():
    return redirect("http://www.baidu.com")
if __name__ == "__main__"


目录
相关文章
|
2天前
|
云安全 人工智能
2025,阿里云安全的“年度报告”
拥抱AI时代,阿里云安全为你护航~
1439 1
|
9天前
|
云安全 人工智能 算法
以“AI对抗AI”,阿里云验证码进入2.0时代
三层立体防护,用大模型打赢人机攻防战
1414 10
|
9天前
|
机器学习/深度学习 安全 API
MAI-UI 开源:通用 GUI 智能体基座登顶 SOTA!
MAI-UI是通义实验室推出的全尺寸GUI智能体基座模型,原生集成用户交互、MCP工具调用与端云协同能力。支持跨App操作、模糊语义理解与主动提问澄清,通过大规模在线强化学习实现复杂任务自动化,在出行、办公等高频场景中表现卓越,已登顶ScreenSpot-Pro、MobileWorld等多项SOTA评测。
1326 7
|
10天前
|
人工智能 Rust 运维
这个神器让你白嫖ClaudeOpus 4.5,Gemini 3!还能接Claude Code等任意平台
加我进AI讨论学习群,公众号右下角“联系方式”文末有老金的 开源知识库地址·全免费
1197 15
|
4天前
|
人工智能 前端开发 API
Google发布50页AI Agent白皮书,老金帮你提炼10个核心要点
老金分享Google最新AI Agent指南:让AI从“动嘴”到“动手”。Agent=大脑(模型)+手(工具)+协调系统,可自主完成任务。通过ReAct模式、多Agent协作与RAG等技术,实现真正自动化。入门推荐LangChain,文末附开源知识库链接。
449 118
|
2天前
|
机器学习/深度学习 测试技术 数据中心
九坤量化开源IQuest-Coder-V1,代码大模型进入“流式”训练时代
2026年首日,九坤创始团队成立的至知创新研究院开源IQuest-Coder-V1系列代码大模型,涵盖7B至40B参数,支持128K上下文与GQA架构,提供Base、Instruct、Thinking及Loop版本。采用创新Code-Flow训练范式,模拟代码演化全过程,提升复杂任务推理能力,在SWE-Bench、LiveCodeBench等基准领先。全阶段checkpoint开放,支持本地部署与微调,助力研究与应用落地。
329 1
|
7天前
|
存储 缓存 NoSQL
阿里云经济型e实例(ecs.e-c1m4.large)2核8G云服务器优惠活动价格及性能测评
阿里云经济型e实例(ecs.e-c1m4.large)2核8G配置,支持按使用流量或按固定带宽两种公网计费方式,搭配20G起ESSD Entry云盘,是主打高性价比的内存优化型入门选择。其核心特点是8G大内存适配轻量内存密集场景,计费模式灵活可控,既能满足个人开发者的复杂测试项目需求,也能支撑小微企业的基础业务运行,无需为闲置资源过度付费。以下从优惠活动价格、性能表现、适用场景及避坑要点四方面,用通俗语言详细解析。
233 153
|
4天前
|
机器学习/深度学习 人工智能 算法
炎鹊「Nexus Agent V1.0」:垂直领域AI应用的原生能力引擎
炎鹊AI「Nexus Agent V1.0」是垂直行业专属AI原生引擎,融合大模型、AIGA决策大脑、行业知识图谱与专属模型,打造“感知-决策-执行”闭环。支持21个行业低代码构建工具型、员工型、决策型AI应用,实现技术到业务价值的高效转化,推动AI从实验走向规模化落地。(239字)
248 1

热门文章

最新文章