07-11 django 51-55
______egon新书python全套来袭请看:https://egonlin.com/book.html
51.使用Django中modelfilter条件过滤方法,把下边sql语句转化成python 代码
select * from company where title like "%abc%" or mecount>999 order by createtime desc;
52.从输入http://www.baidu.com/到页面返回,中间都是发生了什么?
1、域名解析:
浏览器向DNS获取web服务器 www.baidu.com这个域名的 的ip地址
2、建立TCP连接
浏览器与对应ip地址的服务器进行TCP链接,端口为80
3、浏览器执行HTTP协议,发送GET请求,读取对应文件
4、服务器接收到请求后,返回网页信息
5.客户端浏览器将这些信息组织成用户可以查看的网页形式
53.django 请求的生命周期?
. 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端
请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者post,体现在url之中.
. url经过Django中的wsgi,再经过Django的中间件,最后url到过路由映射表,在路由中一条一条进行匹配,
一旦其中一条匹配成功就执行对应的视图函数,后面的路由就不再继续匹配了.
. 视图函数根据客户端的请求查询相应的数据.返回给Django,然后Django把客户端想要的数据做为一个字符串返回给客户端.
. 客户端浏览器接收到返回的数据,经过渲染后显示给用户.
54.django 中如何在 model 保存前做一定的固定操作,比如写一句日志?
利用Django的Model的Signal Dispatcher,通过django.db.models.signals.pre_save()方法,在事件发生前,发射触发信号,这一切都被调度中的receiver方法深藏功与名的保存了。
信号的处理一般都写在Model中,举个例子:
import logging
from django.db import models
from django.db.models.signals import pre_save
from django.dispatch import receiver
class Order(models.Model):
logger = logging.getLogger(__name__)
@receiver(pre_save, sender=Order)
def pre_save_handler(sender, **kwargs):
logger.debug("{},{}".format(sender, **kwargs))
55、django的request对象是在什么时候创建的?
`class WSGIHandler(base.BaseHandler):`
`-------request = self.request_class(environ)`
请求走到WSGIHandler类的时候,执行**cell**方法,将environ封装成了request