Joe1sn's Cabinet

【Muud开发】1.基础结构解析

从0到1开发一个勉强能用的python web“框架”

项目地址:https://github.com/Joe1sn/muud

简单介绍

​ 在毕业设计的时候,初始选题为《基于XMPP的即时通讯系统》,想的是自己照着RFC写一遍XMPP协议,但是时间不够(毕竟要上班)。所以把废案再利用,抽出其中的一些部分,从Socket到web框架,实现一个简单的CURD功能,锻炼一下自己的文档化编程能力。受我个人能力有限会随时断更,一路上只有vscode和chatGPT以及所需要的RFC文档。

​ 再说说已实现的部分,首先是确定在Linux上运行的,使用python语言

  • 使用epoll模型完成了部分HTTP服务器的功能

    image-20230601015224293

  • sqlalchemy完成了数据库的ORM实现

    数据库实现

    ORM使用示例

  • 路由通过闭包完成

    image-20230601015455217

    image-20230601015736199

  • 视图部分编写(只考虑JSON传递)

    image-20230601015921484

    image-20230601015909570

  • 启动部分参考了Django的设计

    image-20230601020119447

最后运行的效果

image-20230601020247259

需求分析

根据ChatGPT,一个典型的Python Web框架通常由以下几个核心组件组成:

  1. 路由(Routing):路由用于将传入的HTTP请求映射到相应的处理程序或视图函数上。它确定了不同URL路径与应用程序中的不同功能点之间的关联关系。
  2. 视图(Views):视图是处理HTTP请求并生成HTTP响应的函数或方法。它们接收来自路由的请求并执行相应的逻辑,最后返回响应给客户端。
  3. 模板引擎(Template Engine):模板引擎允许开发者将静态模板和动态数据结合,生成最终的HTML响应。模板引擎通常支持模板语法、变量替换、条件判断、循环等功能,以简化动态内容的生成。
  4. 中间件(Middleware):中间件是位于请求和视图之间的组件,用于在请求到达视图之前或响应返回客户端之前执行一些通用的功能。中间件可以处理身份验证、请求预处理、错误处理等任务。
  5. 数据库访问(Database Access):Web框架通常提供了对数据库的支持,以便应用程序可以与数据库进行交互。这包括连接数据库、执行查询和操作、ORM(对象关系映射)等功能。
  6. 表单处理(Form Handling):Web应用程序通常需要处理用户提交的表单数据。框架提供了表单验证、数据绑定、错误处理等功能,使开发者可以方便地处理表单数据。
  7. 身份验证与授权(Authentication and Authorization):身份验证用于验证用户的身份,而授权则用于确定用户是否有权限执行特定操作。框架通常提供了身份验证和授权的支持,以便开发者可以轻松实现用户认证和授权功能。
  8. 测试框架(Testing Framework):测试框架用于编写和执行自动化测试,以确保应用程序的正确性和稳定性。它提供了测试用例的编写、运行和断言等功能。

后来的项目像参考Django的设计

目前项目缺少的:

  • 模板渲染:设计的时候考虑到前后端分离是开发,没有想过渲染
  • 中间件:完全没有设计
  • 表单处理:完全没有设计
  • 测试框架:还在学

对于Django这样的框架来说,开启一个项目后,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
.
├── 开启的app名称
│   ├── admin.py
│   ├── apps.py
│   ├── __init__.py
│   ├── migrations
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── 项目名称
│   ├── asgi.py
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── manage.py
├── static
└── templates

views.py是视图、models.py是ORM对象、asgi.py\wsgi.py是HTTP服务、setting.py是设置、url.py是路由,项目从manage,py开始,那么就可以整理一下原来的代码了。

那么目前项目的结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
├── config
│ ├── client.conf
│ ├── database.conf
│ ├── server.conf
│ ├── server.crt
│ ├── server.csr
│ └── server.key
├── manage.py
├── README.md
├── requirements.txt
├── rprint.py
├── server
│ ├── db.py
│ ├── models.py
│ ├── serialization.py
│ ├── server.py
│ ├── urls.py
│ ├── utils
│ │ ├── autoreload.py
│ │ ├── epollcontrol.py
│ │ ├── functional.py
│ └── views.py
└── test
  • config

    包含数据库配置(database.conf),SSL使用的证书(server.csr)和key(server.key),socket服务配置(server.conf)

  • utils

    一些帮助模块

  • server

    主要功能实现,包括路由、epoll管理、数据库相关,其中views.py可以编写api,urls.py中设置路由

  • test

    一些测试用例

目前应该专注于第一块:优化epoll性能以及wsgi、asgi的实现。