Flask框架基础入门教程_ezflaskapp

复制代码
pip install flask

Flask 快速入门小应用

学东西,得先知道我们用这个东西,能做出来一个什么东西。

一个最小的基于flask 的应用可能看上去像下面这个样子:

复制代码
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run(0.0.0.0)

运行起来的效果就是这样的:

具体,这串代码什么意思?

首先,我们导入了Flask 这个类

然后编写了一个hello_world 函数,返回一个"Hello World"字符串

这也就是为啥我们能在网页上看到一串字符串的原因。

那么剩下的是什么?

复制代码
@app.route('/')

这一串代码,官方解释为路由 ,其实就是告诉你当用户访问哪个路径的时候,调用下面装饰的这个函数。

所以上面那个小应用的代码,意思就是,当我访问根路径('/')时执行hello_world函数。

当然,一个函数被多个路由装饰的时候,意味着你可以通过多个路径执行到该函数。

调用app的run方法即可启动服务,指定'0.0.0.0',这会让操作系统监听所有公网 IP。

复制代码
app.run(0.0.0.0)

再看看下面这个例子:

复制代码
from flask import Flask
app = Flask(__name__)

@app.route('/')
@app.route('/index')
def hello_world():
    return 'Hello World!'

@app.route('/login')
def login():
    return 'Login Success!'

if __name__ == '__main__':
    app.run(0.0.0.0)


EZ ~~

Flask 之模板的使用

经过上面的小应用,我们可以简单的利用flask生成一个小的网页,但是,这网页我想要加点样式怎么办?

一个最简单也是最懒的方法:就是让函数直接返回一串html代码

比如下面这个例子:

复制代码
@app.route('/')
@app.route('/index')
def hello_world():
    def index():
        user = {'username': 'Cxiansheng'}
        return '''
    <html>
        <head>
            <title>Home Page - CSDN</title>
        </head>
        <body>
            <h1>Hello, ''' + user['username'] + '''!</h1>
        </body>
    </html>'''

那么问题来了,我所有的函数都需要这串html代码怎么办?总不能所有的函数都返回一下这一段html代码吧。

这个时候,模板 就派上用场了。

为了简化这些操作,Flask 配备了 Jinja2 模板引擎

我们把上面的html 代码装换成模板,命名为'index.html':

复制代码
<html>
    <head>
        <title>{{ title }} - CSDN</title>
    </head>
    <body>
        <h1>Hello, {{ user.username }}!</h1>
    </body>
</html>

然后就可以使用 render_template() 方法来渲染模板,传入必要的参数即可

复制代码
@app.route('/')
@app.route('/index')
def hello_world():
    user = {'username': '这是模板生成的'}
    return render_template('index.html', title='Home', user=user)

偷懒成功,现在我们可以直接调用这个模板,而不需要手动返回html代码了。

突然一个念想:

那多个网页共有部分的html 代码可不可以也单独保存成一个模板?

例如CSDN的标题栏:

既然想偷懒,就继续偷懒下去吧。

我们可以利用模板继承的思想,去避免重复性的代码编写,例如:

我们利用上面的两个快速小应用,做一个标题栏,那么标题栏的html代码我们就可以做一个base.html用来给其他页面继承使用。

如何继承?

利用"{% extends 'base.html' %} ",即可继承base.html的代码

首先我们先看一下base.html的代码:

复制代码
<html>
    <head>
        {% if title %}
        <title>{{ title }} - CSDN</title>
        {% else %}
        <title>welcome - CSDN</title>
        {% endif %}
    </head>
    <body>
    <div>
        My Website:
        <a href="{{ url_for('index') }}">Home</a>
        <a href="{{ url_for('login') }}">Login</a>
    </div>

    <hr>
    {% block content %}{% endblock %}
    </body>
</html>

其中 {% block content %}{% endblock %}这两个标识,即标记继承过来的代码所占的坑,也就是说,如果index.html 代码继承了base.html代码,那么index.html代码将会被放置在 {% block content %}{% endblock %}这两个标识之间。

下面看看index.html代码

复制代码
{% extends 'base.html' %}
{% block content %}
    <h1>Hello {{ user.username }}!</h1>
{% endblock %}
相关推荐
wertyuytrewm8 小时前
用Python实现自动化的Web测试(Selenium)
jvm·数据库·python
盐水冰8 小时前
【烘焙坊项目】后端搭建(14) - 工作台&导出数据报表
java·后端·学习
小杍随笔8 小时前
【Rust 语言编程知识与应用:闭包详解】
开发语言·后端·rust
曲辕RPA8 小时前
深度解析GEO技术及背后的机器人曲辕RPA
python·ai·自动化·rpa
2301_764441338 小时前
使用python构建的STAR实验ΛΛ̄自旋关联完整仿真
开发语言·python·算法
xifangge20258 小时前
Python 爬虫实战:爬取豆瓣电影 Top250 数据并进行可视化分析
开发语言·爬虫·python
Flittly8 小时前
【从零手写 ClaudeCode:learn-claude-code 项目实战笔记】(10)Team Protocols (团队协议)
笔记·python·ai·ai编程
阿_旭8 小时前
基于YOLO26深度学习的蓝莓成熟度检测与分割系统【python源码+Pyqt5界面+数据集+训练代码】图像分割、人工智能
人工智能·python·深度学习·毕业设计·蓝莓成熟度检测
小璐资源网8 小时前
从源码看ArrayList与LinkedList的性能差异
后端
lxmyzzs8 小时前
使用Python分析COCO数据集标注信息:一个简单脚本实现统计与可视化
python·深度学习·目标检测·计算机视觉