admin管理员组

文章数量:1530017

文章目录

  • 任务清单管理系统(一)
  • 一、项目简介
    • 1.项目简介
    • 2.项目功能
    • 3.技术分析
      • 1.为什么选择Flask?
      • 2.为什么选择Mariadb?
      • 3.为什么选择Bootstrap?
  • 二、Flask开发大型项目结构
    • 1.项目结构
    • 2.配置文件选项
    • 3.程序工厂函数
      • (1)为什么需要程序工厂函数?
      • (2)如何实现程序工厂函数?
      • (3)`app/__init__.py` 文件详细代码如下:
    • 4.蓝图: 组件化开发(‘功能分类’)(敲重点*)
      • 1.什么是蓝图
      • 2.为什么使用蓝图
      • 3.应用蓝图三部曲
      • 4.例如:任务清单蓝图的应用
        • (1)auth 蓝图
        • (2)todo蓝图
    • 5. 启动脚本
    • 6.依赖包文件
    • 7.单元测试
      • 1.什么是单元测试?
      • 2.如何实现单元测试?
      • 3.unittest 核心概念及关系
      • 4.测试范例
      • 5.任务清单单元测试的应用
  • 三、将项目上传Github
    • 1.安装git
    • 2.Git常用命令流程图
    • 3.将项目上传Github

任务清单管理系统(一)

一、项目简介

项目地址:https://github/lvah/TodoList

1.项目简介

B/S:客户端/服务端
C/S:浏览器端/服务端
大部分项目都是B/S

任务清单管理系统采用 B/S 架构,基于 Linux 平台开发。采用轻量级的 Web服务器 Nginx, 其后端实现建议采用基于Python 语言的 Flask 开源 Web 框架,进而增强扩展性。数据库采用关系型数据库 Mariadb ,前端的技术栈使用 Bootstrap 框架。该系统面向学生或者企业员工,提供任务添加、任务删除、任务完成标记, 任务搜索 ,可视化操作、数据实时展现等功能,目的在于轻松查看自己和他人的工作安排,合理规划手头任务。

2.项目功能

就像一般的 Todo List 应用一样, 实现了以下功能:

管理数据库连接
列出现有的待办事项
创建新的待办事项
检索单个待办事项
编辑待办事项或标记待办事项
删除待办事项

3.技术分析

1.为什么选择Flask?

Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask使用 BSD 授权。

Flask也被称为 “microframework” ,因为它使用简单的核心,用 extension 增加其他功能。Flask没有默认使用的数据库、窗体验证工具。

因此Flask是一个使用Python编写的轻量级Web应用框架。轻巧易扩展,而且够主流,有问题不怕找不到人问,最适合这种轻应用了。

2.为什么选择Mariadb?

MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。MariaDB虽然被视为MySQL数据库的替代品,但它在扩展功能、存储引擎以及一些新的功能改进方面都强过MySQL。而且从MySQL迁移到MariaDB也是非常简单的.

3.为什么选择Bootstrap?

Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架。Bootstrap 是基于 HTML、CSS、JavaScript 的。具有移动设备优先、浏览器支持良好、容易上手、响应式设计等。

二、Flask开发大型项目结构

1.项目结构

这个框架可以用在任何flask项目中

• requirements.txt 列出了所有依赖包,便于在其他电脑中重新生成相同的虚拟环境;
• config.py 存储配置;
• manage.py 用于启动程序以及其他的程序任务。

2.配置文件选项

程序经常需要设定多个配置。一般分为开发、测试和生产环境, 它们使用不同的数据库,不会彼此影响。

# config.py
"""
存储配置;
"""
import os

# 获取当前项目的绝对路径;
basedir = os.path.abspath(os.path.dirname(__file__))


class Config:
    """
   所有配置环境的基类, 包含通用配置
   """
    #加密key值,一般在闪现信息时用
    SECRET_KEY = os.environ.get('SECRET_KEY') or 'westos secret key'
    #数据库自动提交
    SQLALCHEMY_COMMIT_ON_TEARDOWN = True
    #跟踪数据库修改,
    SQLALCHEMY_TRACK_MODIFICATIONS = True


    @staticmethod
    def init_app(app):
        pass


class DevelopmentConfig(Config):
    """
   开发环境的配置信息
   """
    # 启用了调试支持,服务器会在代码修改后自动重新载入,并在发生错误时提供一个相当有用的调试器。
    DEBUG = True
    #数据库地址
    SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'data-dev.sqlite')


class TestingConfig(Config):
    """
   测试环境的配置信息
   """
    TESTING = True
    SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'data-test.sqlite')


class ProductionConfig(Config):
    """
   生产环境的配置信息
   """
    SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir,'data.sqlite')

config = {
   
    'development': DevelopmentConfig,
    'testing': TestingConfig,
    'production': ProductionConfig,
    'default': DevelopmentConfig
}

3.程序工厂函数

它是一个函数。
它用来创建对象。
它像工厂一样,“生产”出来的函数都是“标准件”(拥有同样的属性)

(1)为什么需要程序工厂函数?

在单个文件中开发程序很方便,但却有个很大的缺点,因为程序在全局作用域中创建,所以无法动态修改配置。运行脚本时,程序实例已经创建,再修改配置为时已晚。这一点对单元测试尤其重要,因为有时为了提高测试覆盖度,必须在不同的配置环境中运行程序。

这个问题可以用程序工厂函数来解决:延迟创建Flask应用,应用场景如下:
1)测试。可以使用多个应用程序的实例,为每个实例分配不同的配置,从而测试每一种不同的情况。
2)多个实例。要同时运行同一个应用的不同版本,可以在你的Web服务器中配置多个实例并分配不同的配置。

(2)如何实现程序工厂函数?

创建扩展类时不向构造函数传入参数, 在之前创建的扩展对象上调用 init_app() 可以完成初始化过程。

不使用程序工厂函数:

app = Flask(__name__)   #实例化一个app
bootstrap = Bootstrap(app)  #Bootstrap装饰app
mail = Mail(app) #Mail装饰app

使用程序工厂函数:

bootstrap = Bootstrap()  #先实例化好对象,将来有app的时候在关联
mail = Mail() 

def create_app():  #返回的是一个app
	app = Flask(__name__) 
	bootstrap.init_app(app) 
	mail.init_app(app) 
	return app

(3)app/__init__.py 文件详细代码如下:

包的详细信息:

"""
程序工厂函数, 延迟创建程序实例
"""
from flask import Flask
from flask_bootstrap import Bootstrap
from flask_mail import Mail
from flask_sqlalchemy import SQLAlchemy
from config import config

bootstrap = Bootstrap()
mail = Mail()
db = SQLAlchemy()

def create_app(config_name='default'):
    """
   默认创建开发环境的app对象
   """
    app = Flask(__name__)
    # 获取开发环境的配置信息
    app.config.from_object(config[config_name])
    config[config_name].init_app(app)
    bootstrap.init_app(app)
    mail.init_app(app)
    db.init_app(app)
    # 附加路由和自定义的错误页面
    # .........后续还需完善, 补充视图和错误页面
    from app.auth import  auth as auth_bp
    app.register_blueprint(auth_bp)
    from app.todo import  todo as todo_bp
    app.register_blueprint(todo_bp, url_prefix='/todo')
    return app

4.蓝图: 组件化开发(‘功能分类’)(敲重点*)

1.什么是蓝图

Flask蓝图提供了模块化管理程序路由的功能,使程序结构清晰、简单易懂。
假如说我们要为某所学校的每个人建立一份档案,一个很自然的优化方式就是这些档案如果能分类管理,就是说假如分为老师、学生、后勤人员等类别,那么后续查找和管理这些档案就方便清晰许多。
Flask的蓝图就提供了类似“分类”的功能。

2.为什么使用蓝图

将不同的功能模块化
构建大型应用
优化项目结构
增强可读性,易于维护

3.应用蓝图三部曲

  • 蓝图的创建: app/auth/__init__.py
# 'auth'是蓝图的名称 
# __name__是蓝图所在路径 
auth =Blueprint('auth',__name__) 
from . import views
  • 蓝图对象上注册路由,指定静态文件夹,注册模版过滤器: app/auth/views.py (将蓝图和路由以及视图函数绑定在一起)
@auth.route('/') 
def auth_home(): 
	return<

本文标签: 管理系统项目管理清单webflask