Flask框架路由和视图用法实例分析

Flask框架路由和视图用法实例分析

Flask是一种使用Python编写的Web开发框架。Flask框架能够帮助我们快速构建Web应用程序。在Flask框架中,我们需要关注的一些关键概念包括路由(routing)、视图(views)、模板(templates)和表单(forms)。在本文中,我将详细介绍Flask框架中的路由和视图的用法,并提供两个完整的代码示例。

路由(routing)

在Flask中,路由是指将URL映射到网站处理程序的过程。路由器负责将HTTP请求分配到相应的处理程序上。Flask中的路由通常使用装饰器的方式定义。

在下面的代码示例中,我们将创建一个将URL / 映射到函数 index() 的路由器:

from flask import Flask

app = Flask(__name__)

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

在这个代码中,index() 函数将会处理对根URL / 的GET请求,并返回一个字符串 'Hello, World!'。使用Flask框架,非常容易创建新的路由,只需要添加一个新的路由装饰器即可。

视图(views)

视图是Web应用程序的核心组件,视图负责将数据呈现给用户。Python中的视图通常是处理HTTP请求并生成HTML响应的函数。

在下面的代码示例中,我们将创建一个将URL /books 映射到函数 list_books() 的视图。

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/books')
def list_books():
    books = ['Python Crash Course', 'Flask Web Development', 'Django for Beginners']
    return render_template('books.html', books=books)

在这个代码示例中,我们定义了一个函数 list_books(),该函数负责渲染模板 books.html,并将书籍列表books传递给该模板。可以看到,使用Flask框架创建视图非常容易。

示例1:创建博客网站

接下来,我们将使用Flask框架创建一个博客网站。这个示例项目将使用Jinja2模板引擎来渲染模板,并使用SQLite数据库来存储文章内容。在这个示例中,我们将学习如何创建并使用路由,如何使用视图,以及如何在Flask中使用数据库。

我们将创建以下四个URL,每个URL将使用不同的视图处理器:

  • /: 使用 index() 视图,显示所有文章的概览
  • /article/<article_id>: 使用 article() 视图,显示给定ID的文章内容
  • /create: 使用 create() 视图,允许用户创建新文章
  • /about: 使用 about() 视图,显示有关博客的信息和联系方式

下面是完整的Flask应用程序代码。要运行这个应用程序,请将其保存为app.py文件,并使用命令flask run运行。

import sqlite3
from flask import Flask, render_template, request, redirect, url_for

DB_NAME = 'test.db'

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'

def get_articles():
    with sqlite3.connect(DB_NAME) as conn:
        c = conn.cursor()
        result = c.execute('SELECT id, title, text FROM articles')
        articles = [{'id': row[0], 'title': row[1], 'text': row[2]} for row in result.fetchall()]
        return articles

def get_article(article_id):
    with sqlite3.connect(DB_NAME) as conn:
        c = conn.cursor()
        result = c.execute('SELECT id, title, text FROM articles WHERE id = ?', (article_id,))
        article = {'id': result.fetchone()[0], 'title': result.fetchone()[1], 'text': result.fetchone()[2]}
        return article

@app.route('/')
def index():
    articles = get_articles()
    return render_template('index.html', articles=articles)

@app.route('/article/<int:article_id>')
def article(article_id):
    article = get_article(article_id)
    return render_template('article.html', article=article)

@app.route('/create', methods=['GET', 'POST'])
def create():
    if request.method == 'POST':
        title = request.form['title']
        text = request.form['text']
        with sqlite3.connect(DB_NAME) as conn:
            c = conn.cursor()
            c.execute('INSERT INTO articles (title, text) VALUES (?, ?)', (title, text))
            conn.commit()
        return redirect(url_for('index'))
    else:
        return render_template('create.html')

@app.route('/about')
def about():
    return render_template('about.html')

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

在这个例子中,我们首先导入相关的模块,并定义了数据库文件的名称和应用程序的名称。在下一步中,我们创建两个函数 get_articles()get_article(),这两个函数分别从数据库中检索所有文章或特定文章的信息。这些函数返回文章信息的列表或文章信息的字典。

接下来,我们定义了四个路由。每个路由都映射到不同的视图处理器,并使用Jinja2模板引擎渲染不同的模板。在视图中,我们调用了 get_articles()get_article() 函数来检索文章信息,然后将它们传递给模板以进行渲染。

例子2:创建REST API

另一个常见的任务是创建REST API。在下面的代码示例中,我们将创建一个简单的REST API,用于检索和更新用户的帐户信息。这个API包含两个路由:

  • /user/<int:user_id>: 使用 get_user() 视图,检索给定ID的用户信息
  • /user/<int:user_id>: 使用 update_user() 视图,更新给定ID的用户信息

下面是完整的Flask应用程序代码。要运行这个应用程序,请将其保存为app.py文件,并使用命令flask run运行。

import sqlite3
from flask import Flask, jsonify, request, abort

DB_NAME = 'test.db'

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'

def get_user(user_id):
    with sqlite3.connect(DB_NAME) as conn:
        c = conn.cursor()
        result = c.execute('SELECT id, name, email FROM users WHERE id = ?', (user_id,))
        user = {'id': result.fetchone()[0], 'name': result.fetchone()[1], 'email': result.fetchone()[2]}
        return user

def update_user(user_id, name, email):
    with sqlite3.connect(DB_NAME) as conn:
        c = conn.cursor()
        result = c.execute('UPDATE users SET name = ?, email = ? WHERE id = ?', (name, email, user_id,))
        rows_modified = result.rowcount
        conn.commit()
        return rows_modified == 1

@app.route('/user/<int:user_id>')
def get_user_route(user_id):
    user = get_user(user_id)
    if user is None:
        abort(404)
    else:
        return jsonify(user)

@app.route('/user/<int:user_id>', methods=['PUT'])
def update_user_route(user_id):
    if not request.json:
        abort(400)
    if 'name' not in request.json or 'email' not in request.json:
        abort(400)
    if not update_user(user_id, request.json['name'], request.json['email']):
        abort(500)
    return jsonify({'success': True})

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

在这个例子中,我们首先导入相关的模块,并定义了数据库文件的名称和应用程序的名称。在下一步中,我们创建两个函数 get_user()update_user(),这两个函数分别从数据库中检索特定用户的信息或更新特定用户的信息。

接下来,我们定义了两个路由。第一个路由使用了 get_user() 函数来检索用户信息,并使用 jsonify() 函数将结果格式化为JSON响应。第二个路由使用了 update_user() 函数来更新用户信息,并将操作结果返回为JSON响应。

总结

在本文中,我们介绍了Flask框架中的路由和视图的用法,并提供了两个完整的代码示例。通过这些指南,你应该能够开始使用Flask框架来创建Python Web应用程序。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Flask框架路由和视图用法实例分析 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Flask配置Cors跨域的实现

    下面是关于 Flask 配置 Cors 跨域的实现的完整攻略,包括两条示例说明。 什么是 CORS? CORS(Cross-Origin Resource Sharing)是一个 W3C 标准,用于解决浏览器的同源策略(Same-origin policy)限制,允许一个网站向另一个网站发出跨域请求,从而实现跨域通信。在跨域操作中,如果访问的资源是非简单请求…

    Flask 2023年5月15日
    00
  • Flask框架URL管理操作示例【基于@app.route】

    下面我将为您详细讲解”Flask框架URL管理操作示例【基于@app.route】”的完整攻略,其中包括两条示例说明。 Flask框架URL管理操作示例【基于@app.route】 在Flask框架中,基于@app.route装饰器可以实现对URL的管理操作。使用这个装饰器,我们可以非常方便地指定URL地址,并将其与相应的函数绑定起来。下面是两个具体的示例:…

    Flask 2023年5月16日
    00
  • 在Python的Flask中使用WTForms表单框架的基础教程

    下面我将为您讲解在Python的Flask中使用WTForms表单框架的基础教程。 一、安装WTForms 在Python命令行中使用pip命令安装WTForms框架,方法如下: pip install WTForms 二、使用WTForms 1.创建表单类 首先,我们需要创建一个表单类来描述我们的表单。在这个表单类中,我们需要定义表单的字段类型、验证规则以…

    Flask 2023年5月16日
    00
  • python文件路径操作方法总结

    基于”python文件路径操作方法总结”这个主题,我会给出完整的攻略,包括以下几个部分的讲解: 什么是文件路径? Python中的文件路径表示方式 文件路径的操作方式(包括绝对路径和相对路径) 示例说明 1. 什么是文件路径? 文件路径是标识文件在计算机上存储位置的一串字符,一般包括文件所在驱动器、目录、文件名和文件扩展名等内容。 在Windows上,文件路…

    Flask 2023年5月16日
    00
  • Flask框架搭建虚拟环境的步骤分析

    下面是“Flask框架搭建虚拟环境的步骤分析”的完整攻略。 步骤1:安装虚拟环境工具 虚拟环境工具可以帮助我们在同一台机器上管理多个 Python 项目所需的不同 Python 环境、包依赖、库版本等。这里推荐使用 virtualenv 工具。 安装 virtualenv 的命令如下: pip install virtualenv 安装成功后可以验证一下: …

    Flask 2023年5月15日
    00
  • scrapy+flask+html打造搜索引擎的示例代码

    下面我将为您详细讲解“Scrapy+Flask+HTML打造搜索引擎的示例代码”的完整攻略。 1. Scrapy爬虫框架 Scrapy是一个Python编写的快速高效的爬虫框架,可以快速和灵活地从网站抓取信息。以下是使用Scrapy构建爬虫的示例代码: import scrapy class QuotesSpider(scrapy.Spider): name…

    Flask 2023年5月16日
    00
  • python写的ARP攻击代码实例

    下面我就为你介绍一下“Python写的ARP攻击代码实例”的完整攻略以及两条示例说明。 什么是ARP攻击? ARP(Address Resolution Protocol,地址解析协议)是在局域网中用来将IP地址转换为MAC地址的协议。在ARP攻击中,攻击者可以伪造发送方的ARP请求或ARP响应,将正常通信的目标主机的IP地址指向另一个IP地址,从而绕过路由…

    Flask 2023年5月16日
    00
  • 利用 Flask 动态展示 Pyecharts 图表数据方法小结

    以下是详细的攻略: 利用 Flask 动态展示 Pyecharts 图表数据方法小结 一、背景 在 Web 应用开发过程中,展示数据是一个非常重要的需求。而 Pyecharts 是一个非常强大且易于使用的数据可视化库,尤其是在 Python 中使用时更是如此。而 Flask 则是一款非常流行的 Python Web 框架,使用 Flask 动态展示 Pyec…

    Flask 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部