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日

相关文章

  • python中如何使用虚拟环境

    使用虚拟环境可以避免不同项目之间的依赖冲突,提高项目开发和部署的可靠性。下面是Python中使用虚拟环境的完整攻略: 步骤 1: 安装虚拟环境 要使用虚拟环境,我们需要先安装虚拟环境模块venv。通常情况下,Python3自带了venv模块,因此你不需要额外安装。如果你使用的是Python2,则可以使用virtualenv来创建虚拟环境。以下是在Linux或…

    Flask 2023年5月15日
    00
  • Python + Flask 实现简单的验证码系统

    下面是关于“Python + Flask 实现简单的验证码系统”的完整攻略。 简介 验证码是一种用于区分人类用户和计算机程序的图像识别技术。在Web应用程序中,验证码被广泛地应用于注册、登录等需要用户提交信息的场景中,以保证提交表单的用户是真实的人类用户而不是自动化程序。本文将介绍如何使用Python语言和Flask框架实现一个简单的验证码系统。 环境设置 …

    Flask 2023年5月15日
    00
  • Python Flask 转换器的使用详解

    介绍 Flask 转换器之前,需要先理解 Flask 中 URL 的基本形式。Flask 的 URL 基本形式为:/path/<variable>/another_path,其中 <variable> 为可变的路由参数,可以根据具体的需求进行设置。 如果 URL 中的参数不是想要的类型,那么我们需要转换器。常见的转换器包括 int、f…

    Flask 2023年5月16日
    00
  • vue+flask实现视频合成功能(拖拽上传)

    下面是详细讲解“vue+flask实现视频合成功能(拖拽上传)”的完整攻略。 总体思路 这个项目的目的是实现用户可以通过拖拽上传多个视频文件,并将这些视频文件拼接成一个新的视频文件自定义保存,同时该视频文件可以在前端进行预览播放。 具体的实现方案是:前端使用vue框架构建视图,并使用dropzone.js插件实现文件的拖拽上传;后端使用flask框架运行py…

    Flask 2023年5月16日
    00
  • YOLOv5部署到web端详细过程(flask+js简单易懂)

    我将为您详细讲解“YOLOv5部署到web端详细过程(flask+js简单易懂)”的完整攻略。过程中将会包含两条示例说明。 YOLOv5部署到web端详细过程(flask+js简单易懂) 1. 简介 本教程将介绍如何将YOLOv5模型部署到web端,使用Flask作为后端框架和JavaScript作为前端框架,在网页上完成检测并展示结果。我们将提供两个示例:…

    Flask 2023年5月15日
    00
  • Python venv虚拟环境跨设备迁移的实现

    下面是详细讲解“Python venv虚拟环境跨设备迁移的实现”的完整攻略,同时包含两条示例说明。 什么是Python venv虚拟环境 Python venv是Python内置的创建虚拟环境的工具,可以用于在同一台设备中创建相互独立的Python环境。虚拟环境中可以安装自己的依赖库,这样就不会和其他环境中的库冲突,保证环境的独立性。 跨设备迁移Python…

    Flask 2023年5月16日
    00
  • vue使用WebSocket模拟实现聊天功能

    下面是详细讲解“vue使用WebSocket模拟实现聊天功能”的攻略。 一、背景介绍 WebSocket协议是HTML5出现后新增的一项协议,基于TCP协议,可以实现客户端和服务器的双向通信。相比传统的Ajax轮询或Comet长轮询方式,WebSocket具有更低的延迟、更高的性能和更强的兼容性。 在Vue中使用WebSocket可以实现实时更新数据、聊天功…

    Flask 2023年5月16日
    00
  • Flask的图形化管理界面搭建框架Flask-Admin的使用教程

    下面是详细讲解 Flask-Admin 工具的使用教程: 一、Flask-Admin 简介 Flask-Admin 是一个为 Flask 应用程序提供图形化管理界面的插件。Flask-Admin 可以轻松添加表单、搜索、过滤以及图表等多种功能,并提供各种插件,方便开发人员快速开发管理页面。 二、安装 Flask-Admin 首先,我们需要通过 pip 安装 …

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