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

yizhihongxing

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表单与表单验证实现流程介绍

    下面我将对”Flask表单与表单验证实现流程介绍”进行详细讲解。 一、Flask表单 1.1 WTForms简介 WTForms是一个用于验证表单数据的Python库。使用它可以很简单地为你的Flask应用程序添加表单支持。它可以完成以下任务: 生成HTML渲染的表单 验证表单数据的完整性和正确性 在验证失败时,向用户显示错误消息 1.2 Flask-WTF…

    Flask 2023年5月15日
    00
  • flask重启后端口被占用的问题解决(非kill)

    下面我将详细讲解如何解决“flask重启后端口被占用”的问题。 问题描述 在使用 Flask 开发 web 应用时,有时会出现在重启应用程序后端口被占用的问题,导致无法正常运行应用程序。 解决方法 方法一:更改应用程序端口 更改应用程序端口是最直接的解决方法。可以通过修改 Flask 应用程序的 config 文件,将端口号改为其他未被占用的端口。 示例如下…

    Flask 2023年5月16日
    00
  • JQuery异步post上传表单数据标准化模板

    JQuery异步post上传表单数据标准化模板是一种常用的前端技术。本攻略将详细讲解此过程,并提供两条示例说明。具体步骤如下: 一、设置请求 url 和 data 请求 url 可以指向一个后台处理请求的页面。 data 是现有表单的序列化数据和其他要提交的数据的对象。对象的主要属性应与表单中的输入字段的“name”属性匹配。 二、设置异步ajax请求 设置…

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

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

    Flask 2023年5月16日
    00
  • jQuery实现Ajax功能分析【与Flask后台交互】

    下面详细讲解下“jQuery实现Ajax功能分析【与Flask后台交互】”的完整攻略。这个攻略主要分为以下几个部分: jQuery实现Ajax请求 与Flask后台交互 示例说明 一、jQuery实现Ajax请求 jQuery中提供了一个ajax()方法,用于发送异步请求。使用ajax()方法,可以轻松地实现Ajax请求,并且可配置许多选项来满足不同的需要。…

    Flask 2023年5月16日
    00
  • python flask 如何修改默认端口号的方法步骤

    想要修改Python Flask默认端口号,需要对Flask应用程序进行一些修改。最常见的方法是使用命令行选项,但也有其他方法。下面是介绍两种常用的修改Flask默认端口的方法。 方法一:使用命令行选项 您可以通过使用命令行选项来轻松地为Flask应用程序指定一个不同的端口。只需在启动应用程序时添加–port参数并指定端口号即可。 示例1:将默认端口修改为…

    Flask 2023年5月16日
    00
  • 深入了解Python Flask框架之蓝图

    下面是“深入了解Python Flask框架之蓝图”的完整攻略: 什么是Flask蓝图(Blueprint)? 在基于Flask框架开发应用程序时,不可避免的会遇到一些问题,比如应用程序的规模逐渐增大,导致代码逐渐复杂,并且难以进行维护。此时,就需要考虑对应用程序进行模块化分解,以便更好地将其组织起来。这就是Flask蓝图出现的原因。 蓝图是一种特殊的Fla…

    Flask 2023年5月15日
    00
  • Django使用HttpResponse返回图片并显示的方法

    当我们需要在Django框架中展示一张图片或者返回一张图片时,可以使用HttpResponse将图片内容以二进制格式返回给浏览器。下面是展示如何使用HttpResponse返回图片并显示的方法的完整攻略: 方法1:读取图片文件并返回 首先在Django的视图函数中,导入以下模块: python from django.http import HttpResp…

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