项目目录规范

Foo/
|-- core/ # 存放业务逻辑相关代码
| |-- core.py
|
|-- api/ # 存放接口文件,接口主要用于为业务逻辑提供数据操作。
| |-- api.py
|
|-- db/ # 放操作数据库相关文件,主要用于与数据库交互
| |-- db_handle.py
|
|-- lib/ # 存放程序中常用的自定义模块
| |-- common.py
|
|-- conf/ # 存放配置文件
| |-- settings.py
|
|-- run.py # 程序的启动文件,一般放在项目的根目录下,因为在运行时会默认将运行文件所在的文件夹 sys.path的第一个路径,这样就省去了处理环境变量的步骤
|-- setup.py # 安装、部署、打包的脚本。
|-- requirements.txt # 存放软件依赖的外部Python包列表
|-- README # 项目说明文件

三层架构

用户视图层

职责:与用户进行交互,接受用户输入的数据,并将其交给逻辑接口层进行处理,逻辑接口层最终会将处理的结果返回给用户视图层展示给用户

示例:登录功能,用户在用户视图层输入用户名密码后,程序将用户名跟密码传递给逻辑接口层进行匹配,最终用户视图层接收逻辑接口层返回的信息比如登录成功或者失败。

from interface import user_interface
def login():
inp_name = input("用户名:").strip()
inp_pwd = input("密码:").strip()
# 将输入的数据传递给逻辑接口层
flog, msg = user_interface.login_interface(inp_name, inp_pwd)
if flog:
print(msg)
else:
print(msg)

逻辑接口层

职责:相当于用户视图层与数据处理层的桥梁专门负责接收用户视图层传过来的数据,并进行核心逻辑的校验,校验的过程中会去访问数据处理层进行数据的增删改查操作,通过或不通过后会返回一个结果给用户视图层进行展示

示例:登陆接口,接收用户传入的数据并将其拿到传入数据处理层进行校验,校验通过后返回登陆成功给用户视图层,否则返回登录失败给用户视图层

from db import db_handle
def login_interface(inp_name, inp_pwd):
# 将数据传入数据处理层进行校验
user_data = db_handle.select(inp_name)
if user_data is None:
# 返回结果给用户视图层
return False, '用户不存在'
if inp_pwd == user_data["password"]:
return True, '登陆成功'
return False, '密码错误'

数据处理层

职责:接收到接口层传递过来的参数,进行数据的处理。

'''
1.增加数据
2.查看数据
3.修改数据
4.删除数据
'''
import json
import os
def select(inp_user):
if os.path.exists(user_json_path):
with open('数据存储路径', 'rt', encoding='utf-8') as f:
user_dic = json.load(f)
# 将校验结果返还给逻辑接口层
return user_dic

python的三层架构的更多相关文章

  1. 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理

    服务器文档下载zip格式   刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...

  2. python 三层架构说明

    三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:表现层(Presentation layer).业务逻辑层(Business Logic Layer) ...

  3. tornado框架&三层架构&MVC&MTV&模板语言&cookie&session

    web框架的本质其实就是socket服务端再加上业务逻辑处理, 比如像是Tornado这样的框架. 有一些框架则只包含业务逻辑处理, 例如Django, bottle, flask这些框架, 它们的使 ...

  4. asp.net三层架构 及其中使用泛型获取实体数据介绍

    asp.net中使用泛型获取实体数据可以发挥更高的效率,代码简洁方便,本例采用三层架构.首先在model层中定义StuInfo实体,然后在 DAL层的SQLHelper数据操作类中定义list< ...

  5. 关于三层架构与MVC的一些理解

    刚毕业的时候,参与了一个上位机的系统开发.上位机所使用的是.net Windows Form技术. 当时,和一个北理的姑娘在一个项目组里.因为她来公司时间比较长,而且经验比较丰富,所以,上位机的架构由 ...

  6. 架构和模式的区别:三层架构和MVC在应用开发中的位置

    架构是系统层面的,可以是多层架构,也可以是事件驱动架构,也可以是微服务架构. 模式是GUI应用的一种职责分离设计. 三层架构(包含多层架构)和 MVC模式(包含MVP, MVVM) 没什么关系,它们不 ...

  7. 从零开始编写自己的C#框架(5)——三层架构介绍

    三层架构对于开发人员来说,已经是司空见惯了,除了大型与超小型项目外,大多都是这种架构来进行开发. 在这里为初学者们简单介绍一下三层架构: (下面内容摘自<趣味理解:三层架构与养猪—<.NE ...

  8. 【转】浅谈MVC与三层架构

    首先给大家引入下MVC的概念: MVC(Model View Controller)模型.视图以及控制器,它是一种较为广泛应用的结构设计模式. 模型:就是在MVC设计模式中需要被显示的数据.在通常情况 ...

  9. 有了门面,程序会更加体面!- pos软件基于三层架构 -09

    续上篇)        大鸟说道:“实际上没有学过设计模式去理解三层架构会有失偏颇的,毕竟分层是更高一级别的模式,所谓的架构模式.不过在程序中,有意识的遵循设计原则,却也可以有效的做出好的设计.”   ...

随机推荐

  1. NC14380 位数差

    NC14380 位数差 题目 题目描述 给一个数组 \({a}\) ,定义 \(h(a,b)\) 为在十进制下 \(a + b\) 与 \(a\) 的位数差,求 \(\displaystyle\sum ...

  2. 021(Keywords Search)(AC自动机)

    题目:http://ybt.ssoier.cn:8088/problem_show.php?pid=1479 题目思路:一道AC自动机的模板题 备注:还不会字典树和KMP的尽早回去重修 如果让你在一篇 ...

  3. CRM汇客 牛刀小试 5个BUG修复

    1.权限管理-用户管理-高级搜索-手机号搜索不可用 1.1现象 1.2解决思路 1.2.1 定位接口 接口名:system/user/list 请求方式:GET请求 1.2.3 确定bug所在位置 b ...

  4. 集合-Collection工具类

    一.概念 二.常用方法 1.Collection和Collections的区别 Collection:是创建集合的接口,Collections是一个操作Collection工具类 2.常用方法 点击查 ...

  5. SQL Server 中的 ACID 属性

    SQL Server 中的事务是什么? SQL Server 中的事务是一组被视为一个单元的 SQL 语句,它们按照"做所有事或不做任何事"的原则执行,成功的事务必须通过 ACID ...

  6. 「一本通 1.4 例 2」[USACO3.2]魔板 Magic Squares

    [USACO3.2]魔板 Magic Squares 题目背景 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 题 ...

  7. Centos7中配置NIS:用户账号管理

    NIS:网络信息服务 Linux系统中用户按地域分两类:本地用户,远程用户(NIS.LDAP.AD)模式:C/S模式 ypbind是定义NIS服务器的客户端进程,一旦确定了服务器位置,客户端绑定到了服 ...

  8. gitlab+jenkins自动构建jar包并发布

    一.背景介绍: 公司软件都是java开发的,一般都会将java代码打包成jar包发布:为了减轻运维部署的工作量,合理偷懒,就需要自动化流程一条龙服务:开发将代码提交到gitlab--->jenk ...

  9. 缓冲流的原理和BufferedOutputStream字节缓冲输出流

    缓冲流的原理 BufferedOutputStream字节缓冲输出流 package com.yang.Test.BufferedStudy; import java.io.BufferedOutpu ...

  10. python主动杀死线程

    简介 在一些项目中,为了防止影响主进程都会在执行一些耗时动作时采取多线程的方式,但是在开启线程后往往我们会需要快速的停止某个线程的动作,因此就需要进行强杀线程,下面将介绍两种杀死线程的方式. 直接强杀 ...