Python Flask 之 路由和渲染模板讲解与示例演示

Python Flask 介绍

一、概述

Flask 是一款运用 Python 编写的 Web 应用结构,其设计理念是轻量级和简略易学。Flask 结构的核心思想是将应用程序的各个部分组织成一组小而相互独立的模块,其间路由和模板是其间的重要组成部分。

Python Flask 之 路由和渲染模板讲解与示例演示

官方官网:flask.net.cn/quickstart.…

二、路由

在 Flask 中,路由是将 URL 地址与应用程序中的函数相映射的过程。当用户在浏览器中输入特定的 URL 地址时,Flask 会调用与该地址相匹配的函数并回来相应的成果。下面是一个简略的路由界说:

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

上述代码中,咱们首要创立一个 Flask 应用程序实例,然后运用 @app.route 装修器界说了一个路由,该路由将 URL / 映射到 hello_world 函数。在该函数中,咱们回来了一个简略的字符串 Hello, World!。

除了回来字符串外,咱们还能够回来 HTML 代码JSON 数据或许其他格局的数据。例如,咱们能够回来一个 HTML 页面,如下所示:

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

在上述代码中,咱们运用 render_template 函数来烘托一个名为 hello.html 的模板文件。这个模板文件需求放在应用程序的根目录下的 templates 目录中。下面是一个简略的模板文件示例:

<!DOCTYPE html>
<html>
  <head>
    <title>Hello, Flask!</title>
  </head>
  <body>
    <h1>Hello, Flask!</h1>
  </body>
</html>

三、烘托模板

Flask 中的模板是一种将数据和 HTML 代码组合在一起的方式,使得咱们能够生成动态的 HTML 页面。运用模板能够使咱们的代码愈加简练、易于维护和复用。下面是一个简略的模板示例:

<!DOCTYPE html>
<html>
  <head>
    <title>{{ title }}</title>
  </head>
  <body>
    <h1>{{ heading }}</h1>
    <p>{{ content }}</p>
  </body>
</html>

在上述模板中,咱们运用了 Flask 提供的模板语言 Jinja2 的语法来动态生成 HTML 代码。例如,{{ title }} 会被替换成变量 title 的值。咱们能够在路由函数中传递数据给模板,如下所示:

from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
    data = {
        'title': 'My Website',
        'heading': 'Welcome to my website!',
        'content': 'This is a sample page generated using Flask and Jinja2.'
    }
    return render_template('template.html', **data)

在上述代码中,咱们界说了一个名为 index 的路由函数,该函数烘托了一个名为 template.html 的模板文件,并将变量 data 作为参数传递给模板。在模板中,咱们运用了变量 titleheadingcontent 来动态生成 HTML 代码。

除了简略的变量替换外,Jinja2 还支撑条件句子、循环句子、过滤器等高档特性。下面是一个运用循环句子的模板示例:

<!DOCTYPE html>
<html>
  <head>
    <title>{{ title }}</title>
  </head>
  <body>
    <h1>{{ heading }}</h1>
    <ul>
      {% for item in items %}
        <li>{{ item }}</li>
      {% endfor %}
    </ul>
  </body>
</html>

在上述模板中,咱们运用了 for 循环句子来遍历变量 items 中的元素,并将它们依次插入到一个无序列表中。咱们还能够运用 if 句子来根据条件选择不同的代码分支,如下所示:

<!DOCTYPE html>
<html>
  <head>
    <title>{{ title }}</title>
  </head>
  <body>
    {% if user %}
      <p>Welcome, {{ user }}!</p>
    {% else %}
      <p>Please log in.</p>
    {% endif %}
  </body>
</html>

在上述模板中,咱们根据变量 user 是否存在来显现不同的代码分支。

模板是 Flask 结构中非常重要的组成部分,能够帮助咱们快速构建动态的 Web 应用程序。在实际应用中,咱们能够运用 Flask 提供的许多扩展来进一步增强应用程序的功能和功能。

四、重定向和过错

在Python Flask中,能够运用重定向(redirect)和过错(error)来处理不同的情况。

重定向一般用于将用户重定向到其他页面,例如,当用户成功登录后,将其重定向到他们的个人资料页面。要在Flask中进行重定向,能够运用 redirect() 函数。例如,以下代码将用户重定向到 /profile 页面:

from flask import redirect, url_for
@app.route('/')
def index():
    return redirect(url_for('profile'))
@app.route('/profile')
def profile():
    return 'This is the profile page'

当用户拜访根目录时,index() 函数将调用 redirect() 函数,将用户重定向到/profile页面。请注意,url_for() 函数用于获取特定路由的URL。

假如产生过错,能够运用 abort() 函数来回来过错代码。例如,以下代码将回来404过错:

from flask import abort
@app.route('/page-not-found')
def page_not_found():
    abort(404)

当用户拜访 /page-not-found 页面时,page_not_found() 函数将调用 abort() 函数,回来404过错。能够运用不同的过错代码来回来不同类型的过错。

缺省情况下每种犯错代码都会对应显现一个是非的犯错页面。运用 errorhandler() 装修器能够定制犯错页面:

from flask import render_template
@app.errorhandler(404)
def page_not_found(error):
    return render_template('page_not_found.html'), 404

注意 render_template() 后边的 404 ,这表明页面临就的犯错 代码是 404 ,即页面不存在。缺省情况下 200 表明:一切正常。

五、日志

在Python Flask中,能够运用日志(logging)来记载应用程序中产生的事情和过错,以便在需求时进行调试和故障扫除。

Flask运用Python内置的 logging 模块来记载日志。能够经过创立一个Logger目标来装备日志,然后运用该目标记载日志。例如,以下代码将创立一个名为 app_loggerLogger 目标,并将其装备为记载到文件中:

import logging
from logging.handlers import RotatingFileHandler
from flask import Flask
app = Flask(__name__)
app_logger = logging.getLogger('app_logger')
app_logger.setLevel(logging.INFO)
handler = RotatingFileHandler('app.log', maxBytes=10000, backupCount=1)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
app_logger.addHandler(handler)
@app.route('/')
def hello_world():
    app_logger.info('Hello World page accessed')
    return 'Hello World!'

代码解说:

  • 在上面的代码中,咱们首要创立了一个名为 app_loggerLogger 目标,并将其设置为记载 INFO 级别的日志。咱们运用 RotatingFileHandler 处理程序将日志记载到名为 app.log 的文件中,并在文件达到10KB时主动翻滚文件。formatter目标用于指定日志格局。

  • 在路由函数 hello_world() 中,咱们运用 app_logger 目标记载了一条日志,说明用户已经拜访了 Hello World 页面。这将在日志文件中增加一行记载,其间包括时刻戳、日志级别和音讯。

  • 运用日志记载器能够方便地进行应用程序的调试和故障扫除,由于它能够记载每个恳求的详细信息,例如恳求的路径、参数、IP地址等。能够运用 logging.basicConfig() 办法进行更高档的日志记载设置。

六、集成 WSGI 中间件

在Python Flask应用程序中,能够经过 WSGI 中间件(middleware)来拓展其功能。WSGI 中间件能够截取恳求和呼应,并在它们抵达应用程序之前或之后履行自界说代码。

WSGI中间件是根据 WSGI 标准完成的,能够运用Python的 WSGI 工具包来编写和集成它们。关于 WSGI 的介绍能够参阅我这篇文章:Python 之 WSGI、uWSGI 和 uwsgi 介绍

下面是一个简略的WSGI中间件示例:

class SimpleMiddleware:
    def __init__(self, app):
        self.app = app
    def __call__(self, environ, start_response):
        # 在恳求抵达应用程序之前履行代码
        response = self.app(environ, start_response)
        # 在应用程序呼应之后履行代码
        return response

代码解说:

  • 在上面的代码中,咱们界说了一个名为 SimpleMiddlewareWSGI 中间件类,该类包括一个构造函数和一个 __call__()办法。构造函数承受一个Flask应用程序作为参数,并将其存储self.app 特点中。__call__() 办法是WSGI中间件标准要求的办法,它承受两个参数:environstart_responseenviron 是一个包括 HTTP 恳求信息的字典,start_response 是一个函数,用于发送HTTP呼应。

  • __call__()办法中,咱们能够在恳求抵达应用程序之前和呼应之后履行自界说代码。在上面的示例中,咱们只是调用了应用程序的 environstart_response 参数,并回来了应用程序的呼应。

要将 WSGI 中间件集成到Flask应用程序中,能够在应用程序创立之后运用 wsgi_app 特点将其包装在 WSGI 应用程序中,如下所示:

from flask import Flask
app = Flask(__name__)
class SimpleMiddleware:
    def __init__(self, app):
        self.app = app
    def __call__(self, environ, start_response):
        # 在恳求抵达应用程序之前履行代码
        response = self.app(environ, start_response)
        # 在应用程序呼应之后履行代码
        return response
app.wsgi_app = SimpleMiddleware(app.wsgi_app)

在上面的代码中,咱们创立了一个名为 SimpleMiddlewareWSGI 中间件类,并将其包装在Flask应用程序的wsgi_app特点中。这样,所有恳求都将经过中间件进行处理,然后再交给应用程序处理。


Python Flask 之 路由和烘托模板解说与示例演示就先到这,有疑问的小伙伴欢迎给我留言哦,后续会继续更新相关技术文章,也可关注我的公众号【大数据与云原生技术共享】深入技术交流或私信咨询问题~

Python Flask 之 路由和渲染模板讲解与示例演示