django在中间件中预设了6个方法,这6个方法区别在于不同的阶段执行,对输入或输出进行干预,方法如下:
1 初始化: 无需任何参数,服务器响应第一个请求的时候调用一次,用于确定是否启用当前中间件
def init():
pass
2.处理请求前:在每个请求上调用,返回None或者HttpResponse 对象
def process_response(request):
pass
3 处理视图前,在每个请求上调用,返回None 或HttpResopnse对象
def process_view(request.view_func, view_args, view_kwargs):
pass
4 处理模板响应前: 在每个请求上调用,返回实现render 方法的响应对象
def peocess_template_response(request, response):
pass
5 处理响应后,多有响应返回浏览器之前被调用,每个请求上调用,返回HttpResponse对象
def process_response(request, response):
pass
6 异常处理:当时图抛出异常时调用,在每个请求上调用,返回一个HttpResponse对象
def process_exception(request, execption):
pass
复制代码
第3题: django开发中数据做过什么优化?
Python学习交流群:1004391443,这里有资源共享,技术解答,还有小编从最基础的Python资料到项目实战的学习资料都有整理,希望能帮助你更了解python,学习python
设计表时,尽量少使用外键,因为外键约束会影响插入和删除性能
使用缓存,减少对数据库的访问
orm框架下设置表时,能使用varchar确定字段长度时,就别用text
可以给搜索频率搞得字段属性,在定义时创建索引
django orm 框架下的Querysets 本来就有缓存的
如果一个页面需要多次链接数据库,最好一次性去除所有需要的数据,减少数据库的查询次数
若页面只需要数据库里面的某一两个字段时,可以用QuerySet.values()
在模板标签里使用with标签可以缓存Qset查询结果
第4题: 解释一下 Django 和 Tornado 的关系、差别?
Django
Django源自一个在线新闻 Web站点,于 2005 年以开源的形式被释放出来。
Django 框架的核心组件有:
用于创建模型的对象关系映射为最终用户设计的完美管理界面一流的 URL 设计设计者友好的模板语言缓存系统等等
它鼓励快速开发,并遵循MVC设计。
Django遵守 BSD版权,最新发行版本是Django1.4,于2012年03月23日发布.Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个组件可以很方便的以“插件”形式服务于整个框架,Django有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展性。它还强调快速开发和DRY(Do Not RepeatYourself)原则。
Tornado
Tornado是 FriendFeed使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本。这个 Web 框架看起来有些像 web.py 或者 Google 的 webapp,不过为了能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关的有用工具和优化。
Tornado 和现在的主流 Web 服务器框架(包括大多数Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其 非阻塞的方式和对epoll的运用,Tornado 每秒可以处理数以千计的连接,这意味着对于实时 Web服务来说,Tornado 是一个理想的 Web 框架。我们开发这个 Web 服务器的主要目的就是为了处理 FriendFeed 的实时功能 ——在 FriendFeed 的应用里每一个活动用户都会保持着一个服务器连接。(关于如何扩容 服务器,以处理数以千计的客户端的连接的问题。
网友评论