码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Python Flask - 快速构建Web应用详解


    合集 - python全景系列(29)
    1.<Python全景系列-1> Hello World,1分钟配置好你的python环境05-142.< Python全景系列-2 > Python数据类型大盘点05-153.< Python全景系列-3 > Python控制流程盘点及高级用法、神秘技巧大揭秘!05-174.< Python全景系列-4 > 史上最全文件类型读写库大盘点!什么?还包括音频、视频?05-185.< Python全景系列-5 > 解锁Python并发编程:多线程和多进程的神秘面纱揭晓05-216.< Python全景系列-6 > 掌握Python面向对象编程的关键:深度探索类与对象05-247.< Python全景系列-7 > 提升Python编程效率:模块与包全面解读05-258.< Python全景系列-8 > Python超薄感知,超强保护:异常处理的绝佳实践05-299.< Python全景系列-9 > Python 装饰器:优雅地增强你的函数和类05-3110.Python生成器深度解析:构建强大的数据处理管道06-0511.掌握Python文件操作:从基础到高阶的全方位探索06-1212.Python单元测试之道:从入门到精通的全面指南07-1813.深入探索 Django Rest Framework07-1314.跨越HTTP无状态边界:Cookie与Session在Django中的实战应用07-1115.Django ORM:最全面的数据库处理指南07-1016.详解Django请求与响应:深入理解Web Http交互的核心机制07-0917.Python Django 模版全解与实战07-0818.Django容易被遗忘却无比重要的框架默认文件介绍及使用方法07-0719.Python 爬虫实战:驾驭数据洪流,揭秘网页深处07-0620.Python史上最全种类数据库操作方法,你能想到的数据库类型都在里面!甚至还有云数据库!07-0521.Python Django 零基础从零到一部署服务,Hello Django!全文件夹目录和核心代码!07-0422.Python Django Web开发实战06-30
    23.Python Flask - 快速构建Web应用详解06-29
    24.深入Python网络编程:从基础到实践06-2525.一文掌握Python多线程与多进程06-2026.Python正则表达式完全指南06-1327.Python的Lambda函数: 一把极简编程的瑞士军刀06-0828.Python 列表推导式:简洁、高效的数据操作艺术06-0729.Python日志模块:实战应用与最佳实践07-19
    收起

    本文将详细探讨Python Flask Web服务。我将首先简单介绍Flask,然后将逐步进入Flask中的路由、模板、表单处理以及数据库集成等高级概念,目标是能够让大家了解并掌握使用Flask来创建动态Web应用的技巧。

    1. Flask简介

    Flask是一个轻量级的Web服务器网关接口(WSGI)web应用框架。它被设计为易于使用,同时也提供了扩展性,用户可以自由地选择将其与哪些第三方库集成。Flask是"微"框架,这意味着其核心功能非常有限,但可以通过一系列的扩展来增强功能。

    让我们来看一下如何创建一个简单的Flask应用。

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

    在这段代码中,我们首先导入Flask模块,并创建一个Flask web服务器实例。然后,我们定义了一个路由(route),即/。这个路由映射到一个函数hello_world,当用户访问这个URL时,它会返回'Hello, World!'字符串。

    2. Flask路由

    Flask通过提供装饰器app.route,使得定义路由变得简单易行。但你知道我们也可以通过app.add_url_rule方法直接添加路由吗?这种方式提供了更多的灵活性,例如,可以为路由添加不同的HTTP方法。

    def hello():
        return "Hello, World!"
    
    app.add_url_rule('/', 'hello', hello)
    

    在上述代码中,app.add_url_rule的第一个参数是URL规则,第二个参数是函数的别名,第三个参数是要映射的函数。

    3. Flask模板

    Flask使用jinja2模板库。这个库非常强大,可以让你在HTML中嵌入Python代码。下面的例子展示了如何在Flask应用中使用模板:

    from flask import render_template
    
    @app.route('/hello/')
    def hello(name):
        return render_template('hello.html', name=name)
    

    render_template函数用于渲染一个模板。它接收模板的名称和一些模板变量作为参数,返回生成的HTML内容。在模板中,你可以使用{{ name }}来显示变量的值。

    4. Flask表单处理

    Flask-WTF是Flask中用于处理Web表单的扩展库。它基于WTF Python,一个处理表单数据的Python库。Flask-WTF还具有CSRF(跨站请求伪造)保护的功能。

    让我们

    看一个简单的例子:

    from flask import request
    from flask_wtf import FlaskForm
    from wtforms import StringField
    
    class MyForm(FlaskForm):
        name = StringField('name')
    
    @app.route('/submit', methods=('GET', 'POST'))
    def submit():
        form = MyForm()
        if form.validate_on_submit():
            return 'Hello, %s' % form.name.data
        return render_template('submit.html', form=form)
    

    在这个例子中,我们定义了一个表单类MyForm,包含一个name字段。然后,我们在submit路由中创建了一个该类的实例,并检查表单是否通过验证。如果表单有效,我们就返回一条欢迎信息;否则,我们就渲染一个表单模板。

    5. Flask数据库集成

    Flask-SQLAlchemy是一个为Flask应用提供SQLAlchemy支持的扩展库。SQLAlchemy是Python中的一种ORM(对象关系映射)工具,可以将类映射到数据库表。

    from flask_sqlalchemy import SQLAlchemy
    
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
    db = SQLAlchemy(app)
    
    class User(db.Model):
        id = db.Column(db.Integer, primary_key=True)
        username = db.Column(db.String(80), unique=True, nullable=False)
    
        def __repr__(self):
            return '' % self.username
    

    在这个例子中,我们首先配置数据库的URL,然后创建一个SQLAlchemy实例。接着,我们定义一个User类,这个类继承自db.Model,并具有两个属性:id和username。这两个属性都是数据库表的列。

    6.使用Flask构建RESTful API

    当构建Web API时,Flask-RESTful是一个值得了解的扩展。它为快速创建REST API提供了简单的方法。你可以通过定义Python类来实现API资源,并将HTTP方法(如GET、POST)映射到类的方法。

    from flask_restful import Resource, Api
    
    api = Api(app)
    
    class HelloWorld(Resource):
        def get(self):
            return {'hello': 'world'}
    
    api.add_resource(HelloWorld, '/')
    

    在上述代码中,我们首先创建了一个Api对象,然后定义了一个资源类HelloWorld,并在这个类中实现了一个get方法。最后,我们使用api.add_resource将HelloWorld类绑定到/ URL。

    7. Flask蓝图

    Flask的蓝图功能让我们能够组织更大、更复杂的应用程序。你可以将蓝图视为Flask应用程序的一个子集,它可以拥有自己的路由、模板和静态文件。

    下面是一个简单的例子:

    from flask import Blueprint
    
    simple_page = Blueprint('simple_page', __name__)
    
    @simple_page.route('/')
    def show(page):
        return 'Page %s' % page
    

    在这个例子中,我们首先创建了一个名为simple_page的蓝图,然后为这个蓝图定义了一个路由show。

    8. Flask错误处理

    Flask允许我们自定义错误处理函数,当特定的HTTP错误发生时,我们可以返回自定义的响应。以下是如何为404错误定义自定义处理函数的示例:

    @app.errorhandler(404)
    def page_not_found(error):
        return 'This page does not exist', 404
    

    在这个例子中,我们使用app.errorhandler装饰器注册一个新的错误处理函数。当404错误发生时,它将返回一个自定义的错误消息。

    9. Flask请求钩子

    Flask提供了几个装饰器,我们可以使用它们来注册在处理请求的不同阶段调用的函数。这些装饰器包括before_first_request、before_request、after_request和teardown_request。

    @app.before_request
    def before_request():
        print("This is executed BEFORE each request.")
    

    在这个例子中,before_request装饰器的函数将在每个请求之前执行。

    10. Flask中的Cookies和Sessions

    在Web开发中,我们常常需要存储用户的信息,例如用户的偏好设置或者登录状态。Flask提供了Cookies和Sessions两种方式来完成这个任务。

    下面是如何在Flask中设置和读取cookie的例子:

    @app.route('/set')
    def setcookie():
        resp = make_response('Setting cookie!')
        resp.set_cookie('username', 'the username')
        return resp
    
    @app.route('/get')
    def getcookie():
        username = request.cookies.get('username')
        return 'The username is ' + username
    

    在上述例子中,setcookie路由设置了一个cookie,名为username,getcookie路由读取并返回了这个cookie的值。

    One more thing

    Flask的测试客户端允许我们模拟向我们的应用发送请求,并查看响应。

    def test_index():
        client = app.test_client()
        response = client.get('/')
        assert response.status_code == 200
    

    在上述代码中,我们首先创建了一个测试客户端。然后,我们使用这个客户端发送一个GET请求到/ URL,最后,我们检查响应的状态码是否为200。

    这只是Flask强大功能的冰山一角,Flask的魅力远不止于此,它还有许多丰富的扩展,比如Flask-Login用于处理用户认证,Flask-Mail用于发送邮件,Flask-Migrate用于处理数据库迁移等等。

    如有帮助,请多关注
    个人微信公众号:【Python全视角】
    TeahLead_KrisChang,10+年的互联网和人工智能从业经验,10年+技术和业务团队管理经验,同济软件工程本科,复旦工程管理硕士,阿里云认证云服务资深架构师,上亿营收AI产品业务负责人。

  • 相关阅读:
    LLVM TableGen 系统学习笔记
    LuatOS-SOC接口文档(air780E)-- fs - 文件系统额外操作
    excel数据分析
    Docker 使用手册
    寻找第k小的数
    【DevOps】在云原生时代的角色与重要性探索
    基于Pandas+余弦相似度+大数据智能护肤品推荐系统——机器学习算法应用(含Python工程源码)+数据集
    Go并发编程之四
    计算机毕业设计之java+springboot基于vue的地方美食分享网站
    如何快速生成项目目录结构树?
  • 原文地址:https://www.cnblogs.com/xfuture/p/17514416.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号