Web框架
MVC
M:Model,模型,和数据库进行交互
V:Views,视图,负责产生Html页面
C:Controller,控制器,接收请求,进行处理,与M和V进行交互,返回应答。
1.用户点击注册按钮,将要注册的信息发送给网站服务器。
2.Controller控制器接收到用户的注册信息,Controller会告诉Model层将用户的注册信息保存到数据库。
3.Model层将用户的注册信息保存到数据库。
4.Model层将保存的结果返回给Controller控制器。
6.Controller控制器收到保存的结果之后,或告诉View视图,View视图产生一个html页面。
7.View将产生的Html页面的内容给了Controller控制器。
8.Controller将Html页面的内容返回给浏览器。
9.浏览器接受到服务器Controller返回的Html页面进行解析展示。
Django创建项目后,项目文件夹下的组成部分(对mvt的理解)
项目文件夹下的组成部分:
manage.py 是项目运行的入口,指定配置文件的路径。
与项目同名的目录,包含项目的配置文件。
init.py 是一个空文件,作用是这个目录可以被当作包使用。
setting.py 是项目的整体配置文件。
urls.py 是项目的URL配置文件。
wsgi.py 是项目与WSGI兼容的Web服务器入口。
MVT
M:Model,模型,和MVC中的M功能相同,和数据库进行交互。
V:views,视图,和MVC中的C功能相同,接收请求,进行处理,与M和T进行交互,返回应答。
T:Template,模板,和MVC中的V功能相同,产生Html页面。
Django,MIDDLEWARES中间件的作用
中间件是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出。每个中间件组件是一个独立的Python类。
具体步骤:与settings.py同级目录下创建 myexception.py 文件,定义MyException类;将定义的类注册到settings.py中间件中
MIDDLEWARE_CLASSES = (
‘test1.myexception.MyException’,
…
)
Django线程,协程,进程
django利用多线程增加异步任务,celery消息队列。
django中使用多线程发送邮件 .send_mail()。
django原生为单线程序,当第一个请求没有完成时,第二个请求阻塞,知道第一个请求完成,第二个请求才会执行。
使用uwsgi编程多并发,使用nginx+uwsgi提供高并发,nginx的并发能力超高,单并发能力过万。
django自带的development server 为多线程模式,但是他还有一个小问题就是它不是线程安全的。可能在请求很多时会出现数据不同步,当然,这一般不是问题,因为我们通常只在自己机器上调试时才用Development Server。
django 关闭浏览器,怎么清楚cookies和session
cookie是有过期时间的,如果不指定,默认关闭浏览器之后cookie就会过期。
Django中操作session:
session也是有过期时间,如果不指定,默认两周就会过期。
request.session.set_expiry(0);那么当浏览器关闭时,session失效
删除session:del request[key]
Django 对 http 请求的执行流程
- 在接受一个Http请求之前的准备
- 启动一个支持WSGI网关协议的服务器监听端口等待外界的Http请求,比如Django自带的开发者服务器或者uWSGI服务器。
- 服务器根据WSGI协议指定相应的Handler来处理Http请求, 并且初始化该handler,在Django框架中由框架自身负责实现一个handler。
- 此时服务器已处于监听状态,可以接收外界的Http请求。
- 当一个http请求到达服务器的时候。
- 服务器根据WSGI协议从Http请求中提取出必要的参数组成一个字典并传入handler中进行处理。
- 在Handler中对已经符合WSGI协议标准规定的http请求进行分析,比如加载Django提供的中间件,路由分配,调用路由匹配的视图等。
- 返回一个可以被浏览器解析的符合http协议的httpresponse。