iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Flask 系列之 优化项目结构
  • 344
分享到

Flask 系列之 优化项目结构

结构项目系列之 2023-01-31 00:01:19 344人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

说明 操作系统:windows 10 python 版本:3.7x 虚拟环境管理器:virtualenv 代码编辑器:VS Code 实验目标 完善环境配置,添加 异常请求 处理 实现 400、404 和 500 处理 首先,在 t

说明

实验目标

完善环境配置,添加 异常请求 处理

实现

400、404 和 500 处理

首先,在 todolist\app\templates\errors 目录下创建一个 400.html 文件,示例代码如下所示:

{% extends 'base.html' %} {% block content %}
<div class="text-center animated fadeInDown">
    <h1>400</h1>
    <h3> 错误请求!! !</h3>
    <div>
        <a href="{{ url_for('index') }}">返回首页</a>
    </div>
</div>

{% endblock %}

todolist\app\templates\errors 目录下创建一个 404.html 文件,示例代码如下所示:

{% extends 'base.html' %} {% block content %}
<div class="text-center animated fadeInDown">
    <h1>404</h1>
    <h3> 页面未能够找到!! !</h3>
    <div>
        抱歉,页面好像去火星啦!
    </div>
</div>

{% endblock %}

todolist\app\templates\errors 目录下创建一个 500.html 文件,示例代码如下所示:

{% extends 'base.html' %} {% block content %}
<div class="text-center animated fadeInDown">
    <h1>500</h1>
    <h3> 内部异常!! !</h3>
    <div>
        <a href="{{ url_for('index') }}">返回首页</a>
    </div>
</div>

{% endblock %}

接着,在 todolist\app 目录下创建 errors.py 文件,,注册 400、 404 、500 路由处理函数,示例代码如下所示:

from flask import render_template
from app import app


@app.errorhandler(400)
def bad_request(e):
    return render_template('errors/400.html'), 400


@app.errorhandler(404)
def page_not_found(e):
    return render_template('errors/404.html'), 404


@app.errorhandler(500)
def internal_server_error(e):
    return render_template('errors/500.html'), 500

添加 CLI

todolist\app 目录下创建 commands.py 文件,示例代码如下所示:

import click
from app import app, db
from app.models import User, Thing


@app.cli.command()
@click.option('--drop', is_flag=True, help='Create after drop.')
def initdb(drop):
    if drop:
        db.drop_all()
    db.create_all()
    print("Initialized database.")


@app.cli.command()
@click.option('--username', prompt=True, help='The username used to login.')
@click.option('--email', prompt=True, help='The email used to Identity.')
@click.option('--passWord', prompt=True, hide_input=True, confirmation_prompt=True, help='The password used to login.')
def admin(username, email, password):
    db.create_all()
    user = User.query.first()
    if user:
        print("Updating user...")
        user.name = username
        user.email = email
        user.generate_password_hash(password)
    else:
        print("Creating user...")
        user = User(name="hippieZhou")
        user.email = email
        user.generate_password_hash(password)
        db.session.add(user)
    db.session.commit()
    print('Done.')

此时,可以将 VS Code 的终端却换至该项目根目录下,可执行上面我们自定义的相关目录,如下图所示:

使用前需要先进入到 app 中,具体可参考 下面的 todolist\app\__init__.py 代码。

完善 Config 配置

首先,修改 todolist\config.py 文件,示例代码如下所示:

import os

basedir = os.path.abspath(os.path.dirname(__file__))


class Config(object):
    sqlALCHEMY_TRACK_MODIFICATIONS = False
    SECRET_KEY = "you will never known it."


class DevelpmentConfig(Config):
    DEBUG = True
    SQLALCHEMY_DATABASE_URI = os.environ.get(
        'DEV_DATABASE_URL') or 'sqlite:///' + os.path.join(basedir, 'todo.sqlite')


class ProductionConfig(Config):
    DEBUG = False
    SQLALCHEMY_DATABASE_URI = os.environ.get(
        'SQLALCHEMY_DATABASE_URI') or 'Mysql+pymysql://root:mysql@127.0.0.1:3306/todo'


config = {
    'development': DevelpmentConfig,
    'production': ProductionConfig
}

接着,修改 todolist\app\__init__.py 文件,示例代码如下所示:

from flask import Flask
from flask_bootstrap import Bootstrap
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager
from config import config

app = Flask(__name__)
app.config.from_object(config['development'])

bootstrap = Bootstrap(app)

db = SQLAlchemy(app)

login_manager = LoginManager(app)

login_manager.login_view = 'login'
login_manager.login_message = '你必须登陆后才能访问该页面'
login_manager.login_message_cateGory = "info"

@login_manager.user_loader
def load_user(user_id):
    from app.models import User
    user = User.query.get(int(user_id))
    return user

@app.context_processor
def inject_user():
    from app.models import User
    user = User.query.first()
    return dict(user=user)

from app import views, errors,commands

最后,修改 todolist\manage.py 文件,示例代码如下所示:

from app import app


if __name__ == "__main__":
    app.run(debug=True, host='0.0.0.0', port=5000)

自此,我们的项目结构和代码已经进一步完善了,完整项目结构如下图所示:

最后,我们可以在 shell 窗口中执行 flask run 命令即可将我们的网站运行起来。

--结束END--

本文标题: Flask 系列之 优化项目结构

本文链接: https://www.lsjlt.com/news/181701.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Flask 系列之 优化项目结构
    说明 操作系统:Windows 10 Python 版本:3.7x 虚拟环境管理器:virtualenv 代码编辑器:VS Code 实验目标 完善环境配置,添加 异常请求 处理 实现 400、404 和 500 处理 首先,在 t...
    99+
    2023-01-31
    结构 项目 系列之
  • Flask 系列之 构建 Swagger
    说明 操作系统:Windows 10 Python 版本:3.7x 虚拟环境管理器:virtualenv 代码编辑器:VS Code 实验 环境初始化 # 创建项目目录 mkdir helloworld cd helloworld ...
    99+
    2023-01-31
    系列之 Flask Swagger
  • 轻松使用Golang Facade优化项目代码结构
    在Golang中,Facade模式可以用来简化代码结构并提供一个统一的接口,以便于对外部系统的访问。下面是一个使用Facade优化项...
    99+
    2023-10-20
    Golang
  • Android 性能优化系列之bitmap图片优化
    背景 Android开发中,加载图片过多、过大很容易引起OutOfMemoryError异常,即我们常见的内存溢出。因为Android对单个应用施加内存限制,默认分配的内存只有几M(...
    99+
    2024-04-02
  • C++高级数据结构之优先队列
    目录前言高级数据结构(Ⅱ)优先队列(Priority Queue)API实现堆的定义二叉堆表示法堆的算法插入元素删除最大元素基于堆的优先队列堆排序前言 高级数据结构(Ⅱ)优先队列(P...
    99+
    2024-04-02
  • Go语言高级导包技巧:优化项目结构与性能
    标题:Go语言高级导包技巧:优化项目结构与性能 随着互联网技术的快速发展,Go语言作为一种强大且高效的编程语言,越来越受到开发者的青睐。在Go项目开发中,合理的导包方式对项目结构和性能...
    99+
    2024-04-02
  • vite项目构建优化的示例分析
    这篇文章主要介绍了vite项目构建优化的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。vite项目构建优化路由动态导入 经过rollup的构建,动态导入的文件将会生成...
    99+
    2023-06-20
  • Java数据结构之堆(优先队列)详解
    目录堆的性质堆的分类堆的向下调整堆的建立堆得向上调整堆的常用操作入队列出队列获取队首元素TopK 问题例子数组排序堆的性质 堆逻辑上是一棵完全二叉树,堆物理上是保存在数组中 。 总...
    99+
    2024-04-02
  • Django项目优化数据库操作总结
    目录合理的创建索引设置数据库持久连接 减少SQL的执行次数仅获取需要的字段数据使用批量创建、更新和删除,不随意对结果排序参考网址:Django官方数据库优化 使用 QuerySet...
    99+
    2024-04-02
  • Java 数据结构与算法系列精讲之队列
    目录概述队列队列实现enqueue 方法dequeue 方法main完整代码概述 从今天开始, 小白我将带大家开启 Jave 数据结构 & 算法的新篇章. 队列 队列 (Q...
    99+
    2024-04-02
  • Vue2.x 项目性能优化之代码优化的实现
    目录1 v-if 和 v-show 的使用 2 computed 和 watch 区分使用 3 v-for 遍历必须为 item 添加 key,且避免同时使用 v-if 4 纯显示长...
    99+
    2024-04-02
  • ASP.Net Core MVC基础系列之项目创建
    一 : 系列教程环境介绍 1: 操作系统, Windows 10 专业版 64位 (版本号: 1809) 2: IDE使用Visual Studio 2017专业版 (版本号: 15...
    99+
    2024-04-02
  • 用Python实现数据结构之优先级队列
    如果我们给每个元素都分配一个数字来标记其优先级,不妨设较小的数字具有较高的优先级,这样我们就可以在一个集合中访问优先级最高的元素并对其进行查找和删除操作了。这样,我们就引入了优先级队列 这种数据结构 最简单的优先级队列可能就是一堆不...
    99+
    2023-01-30
    优先级 数据结构 队列
  • Java数据结构之堆(优先队列)的实现
    堆(优先队列)是一种典型的数据结构,其形状是一棵完全二叉树,一般用于求解topk问题。根据双亲节点大于等于孩子节点或双亲节点小于等于孩子节点,可分为大顶堆和小顶堆,本文实现大顶堆。 ...
    99+
    2024-04-02
  • CocosCreator ScrollView优化系列之分帧加载
    目录一、 前言二、卡死问题分析三、解决方案(理论篇)四、解决方案(代码篇)4.1 利用 Generator 将代码拆分为多个小段4.2 分配每一帧的一些时间去执行五、总结一、 前言 ...
    99+
    2024-04-02
  • Vue项目优化打包之前端必备加分项
    目录前言 一、路由懒加载 1. 为什么需要路由懒加载 2. 如何实现路由懒加载 3. 路由懒加载中的魔法注释 二、分析包大小 1. 需求 2. 如何生成打包分析文件 三、webpac...
    99+
    2024-04-02
  • MySql优化之体系结构及存储引擎的示例分析
    这篇文章给大家分享的是有关MySql优化之体系结构及存储引擎的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、MySQL结构体系总体上, 我们可以把 MySQL 分成三...
    99+
    2024-04-02
  • 项目实战软件测试系列之Python3 S
    项目实战软件测试系列之Python3 Selenium自动化实践系列视频课程,测试用例设计视频教程21套高级软件测试,性能测试,功能测试,自动化测试,接口测试,移动端测试,手机测试,WEB测试,***测试,测试用例设计,黑盒测试,白盒测试,...
    99+
    2023-01-31
    实战 测试 项目
  • 如何使用vue-cli脚手架初始化Vue项目下的项目结构
    这篇文章给大家分享的是有关如何使用vue-cli脚手架初始化Vue项目下的项目结构的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。vue-cli是Vue 提供的一个官方命令行工具,...
    99+
    2024-04-02
  • Java数据结构之优先级队列实例分析
    本文小编为大家详细介绍“Java数据结构之优先级队列实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java数据结构之优先级队列实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、堆的概念堆的定义:...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作