记录bigash学习Django 这个Python web框架的过程
PythonWeb框架
PythonWeb框架有很多
- Flask
定位是微型框架,它的目标就是为你提供一个Web开放的核心支持,如果需要其他功能,可以使用第三方插件,或者自己写一个插件 - Tornado
高性能,并不基于WSGI协议的框架 - Django
Instagrm用的就是Django
这里列出Django的常用内置功能 HTTP封装 ORM admin Form template session和cookie 权限 安全 cache Logging sitemap RSS
基于Python来开发系统,逻辑也是一样的,需要建立好系统模型和数据模型,选择什么工具不是最主要的,最主要的是在脑海中系统的模型,知道每个模块的存放以及作用,
输出产品需求文档(PRD)给开发人员
这里我们使用Python中的一个ORM库,来画出对象实体模型 https://editor.ponyorm.com/
Django基础
Django是基于MVC(MTV)模式的框架,无论叫什么,最终目的就是解耦下图是一次请求涉及的Django模块示意图
Django模块
- Model
整个项目结构中是直接同数据库打交道的一层,所以数据处理的部分都在这一层,关于纯数据操作的部分,应该都放在这一层来做 - View
View层的侧重点在业务上,通过获取数据,过滤数据和整合数据,拿到我们想要的结果,然后通过HttpResponse渲染出来,其包括URL配置,HTTP Request,HTTP Response以及View函数 - Template
模板部分,对设计师友好的部分, - Form
无论是需要通过Form来提交数据的页面,还是Ajax的方式提交数据到后端的,其工作原理和ORM很像,Form师对HTML中的Form表单的的抽象,
WSGI
理解WSGI
WSGI(Web Server Grateway Interface)web服务器网关接口,这是Python中定义的一个网关协议
这个协议使得Python中的Web Sever程序或者说Gateway程序,可以通过统一的协议跟Web应用进行交互,尝试过单线程和多线程的socket之后,更能体会到,在Web框架中,异步非阻塞是一种很常见的模式
- Web Sever
监听某个端口上外部的请求 - Web Application
Web Server接受请求后,通过WSGI协议规定的方式把数据传递给Web Application
最终在Web Application中处理完成之后,设置对应的状态和header,之后返回body部分,Web Sever 拿到返回数据后,进行HTTP封装,最终返回完整的HTTP Resonse数据
result = application(environ, start_response)
#实现的Application需要可以接受一个环境变量以及一个回调函数即可
#WSGI规定,application必须是一个可调用对象,意味着这个对象既可以是Python中的一个函数,也可以是一个实现了__call__方法的类的实例
WSIG中间件
除了交互,WSGI还定义了中间件部分的逻辑,存在Werkzrug这样的WSGI工具集,可以更好的更WSGI协议友好地交互,
Django结构
文件结构
mysite/
manage.py #项目管理,创建,启动项目,数据库管理,创建app
mysite/
__init__.py
settings.py #项目默认的基础配置
urls.py #url和函数的对应关系
asgi.py #处理网路请求 异步
wsgi.py #处理网路请求 同步
APP
小功能的管理,每一个app都有独立的结构
最后
Stanging on Shoulders of Giants