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异步的ASGI与Fast Api实现

    下面是关于“python异步的ASGI与Fast Api实现”的完整攻略,包括两条示例说明: 概述 在Python中,异步编程是一种非常流行的编程范式,以其高效性和低资源消耗而闻名。ASGI(异步服务器网关接口)是Python Web应用程序中使用的异步协议。FastAPI是一个基于ASGI的现代,快速(Fast)框架,可以让你使用Python 3.7+中最…

    Flask 2023年5月16日
    00
  • 基于SQLAlchemy实现操作MySQL并执行原生sql语句

    基于SQLAlchemy实现操作MySQL并执行原生sql语句的完整攻略如下: 安装SQLAlchemy 首先需要安装SQLAlchemy,可以通过pip命令安装: pip install sqlalchemy 连接到MySQL数据库 使用SQLAlchemy连接到MySQL数据库的代码如下: from sqlalchemy import create_en…

    Flask 2023年5月16日
    00
  • flask框架渲染Jinja模板与传入模板变量操作详解

    下面我将为你详细讲解“flask框架渲染Jinja模板与传入模板变量操作详解”的完整攻略。 什么是Jinja模板 Jinja是Flask框架默认的模板引擎,它基于Python的模板引擎,并且使用的语法类似于Django模板引擎。 在Flask中,你可以使用Jinja将Python变量传递到模板中进行渲染,然后将渲染后的模板返回给用户的浏览器。 如何渲染Jin…

    Flask 2023年5月16日
    00
  • flask中使用SQLAlchemy进行辅助开发的代码

    下面是使用SQLAlchemy进行辅助开发的flask代码攻略。 环境准备 在开始之前,需要安装Flask和SQLAlchemy。可以使用pip进行安装,命令如下: pip install Flask pip install SQLAlchemy 创建Flask应用 首先,在代码文件中导入Flask库和SQLAlchemy库: from flask impo…

    Flask 2023年5月15日
    00
  • 90行Python代码开发个人云盘应用

    下面是详细讲解“90行Python代码开发个人云盘应用”的完整攻略。 简介 本攻略旨在教你如何使用Python开发个人云盘应用。该云盘应用支持上传、下载、删除和列出文件等基本操作。我们将使用 Flask 框架和 Python 的 os、shutil、argparse 模块来实现云盘应用。 开发环境 在开始之前,确保你的计算机安装了 Python 3 版本以及…

    Flask 2023年5月16日
    00
  • mvc框架打造笔记之wsgi协议的优缺点以及接口实现

    我来为你详细讲解“MVC框架打造笔记之WSGI协议的优缺点以及接口实现”的完整攻略。 WSGI协议的优缺点 优点 WSGI协议的优点主要有以下几点: WSGI协议是Python Web框架的标准化统一接口,可以让不同的Web框架之间互相兼容和共享资源。 WSGI协议提供了一种简单、轻量级的Web应用程序接口,可以让开发者轻松地构建Web应用程序,同时可以选择…

    Flask 2023年5月16日
    00
  • flask框架中的cookie和session使用

    Flask是一个基于Python的Web框架,提供了许多内置的功能,其中包括Cookie和Session。这些功能使得Flask在Web开发中十分重要,为用户提供了很方便的数据存储和访问方式。下面将详细讲解Flask框架中的Cookie和Session的使用方法和示例。 1. Cookie的使用 1.1. 设置Cookie 在Flask中设置Cookie非常…

    Flask 2023年5月15日
    00
  • Python Tornado之跨域请求与Options请求方式

    下面是针对“Python Tornado之跨域请求与Options请求方式”的完整攻略,包含两条示例说明: 背景 在开发Web应用中,经常会遇到前后端分离的开发模式。面对前后端分离开发,跨域请求就成了常见问题之一。本篇攻略将详细介绍如何使用Python Tornado进行跨域请求。 跨域请求 跨域请求是指从一个域的应用中执行JavaScript代码去请求另一…

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