Django框架面试题-每周积累01

1.什么是WSGI?

WSGI全称是Python Server Gateway Interface,Python Web服务器网关接口,它是介于Web服务器和Web框架之间的一种简单而通用的接口。
它的作用是在不修改服务器和架构代码的基础上确保可以在多个架构下运行web服务器。
那么如何定义一个WSGI接口呢?举个例子:

def application(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    return 'Hello World!'

上面的application()函数就是符合WSGI标准的一个HTTP处理函数,他接受了两个参数:
environ: 一个包含所有HTTP请求信息的dict对象。
start_response:一个发送HTTP响应的函数。
这个application()是由WSGI服务器来调用的。

更多内容可以阅读WSGI到底是什么。

2.django请求的生命周期?

Django的请求生命周期是指:当用户在浏览器上输入url到用户看到网页的这个时间段内,Django后台所发生的事情。

1.当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端,请求头和请求体发给服务器,请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者post。
2.url经过Django中的wsgi,再经过Django的中间件,最后url经过路由映射表,在路由中一条一条的进行匹配,匹配成功就执行相应的视图函数。
3.在视图函数中可以调用orm做数据操作,然后拿到魔板,在后台进行魔板的渲染,魔板渲染完成后变成一个字符返回给浏览器
4.浏览器接收到返回的数据,经过渲染后显示给用户

3.列举django的内置组件?

分页器: 分页器在页面中的使用非常的常见,当数据过多时,页面一次性显示不好看,我们就可以使用分页器,将数据分几次显示
orm: orm实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库。
中间件: 是Django框架给我们预留的函数接口,让我们可以干预请求和应答的过程。
cookie和session:
cookies是浏览器为web服务器存储的一个信息,每次浏览器从某个服务器请求页面时,都会自动带上以前收到的cookie。cookie保存在客户端,安全性较差。
session就是保存在后台数据或者缓存中的一个键值对,同样的存储信息,更好的保护用户的隐私,是对前端cookie的一个升级保护措施。

4.列举django中间件的5个方法?以及django中间件的应用场景?

_init_: 服务器响应第一个请求的时候调用。
process_request: 是在产生request对象,进行url匹配之前调用。
process_view: 是url匹配之后,调用视图函数之前。
process_response: 视图函数调用之后,内容返回给浏览器之前。
process_exception: 视图函数出现异常,会调用这个函数。

class TestMiddleware(object):
    """中间件类"""
    def __init__(self):
        """服务器重启之后,接收第一个请求时调用"""
        print("---init--")
    
    def process_request(self,request):
        """产生request对象之后,url匹配之前调用"""
        print("--process_request--")
        
    def process_view(self,request,view_func,*view_args,**view_kwargs):
        """url匹配之后,视图函数调用之前调用"""
        print("--process_view--")
        
    def process_response(self,request,response):
        """视图函数调用之后,内容返回浏览器之前"""
        print("--process_response--")
        return response
    

中间件帮助我们在视图函数之前或者之后都可以做一些额外的操作,例如:禁止某些IP地址访问我们的网站。

5.简述什么是FBV和CBV?

FBV(function base views):就是在视图中使用函数处理请求。
这种方式使我们在Django框架中一直使用的方式。
CBV(class base views):就是在视图里使用类处理请求。
这种方式有两个优点:

  1. 提高了代码的复用性,可以使用面向对象的技术,比如Mixin(多继承)
  2. 可以用不同的函数针对不同的HTTP方法处理,而不是通过很多if判断,提高代码可读性

你可能感兴趣的:(Django框架)