django源码解读之 View View

  django源码解读之 View View、 ContextMixin、TemplateResponseMixin、TemplateView、RedirectView
  
  View#
  
  Copy
  
  class View(object): """ 所有视图的基类 1 简答的请求方啊过滤 所有的请求都应该在被允许的 请求列表 http_method_names 中 2 实现请求的分发,即按照请求的方法,调用对应的视图函数。<eg: get请求 执行self.get()> """ # "被允许的请求方式列表" http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace'] def __init__(self, **kwargs): """ 视图的构造函数,kwargs 接受所有的额外的参数 """ # 遍历所有的关键字参数,并将键作为实例的属性,值作为实例对象的值 for key, value in six.iteritems(kwargs): setattr(self, key, value) @classonlymethod # 限制该方法只允许类本身调用 不允许实例对象调用 def as_view(cls, **initkwargs): """ 返回一个接受请求并返回响应的可调用视图 流程:1 过滤传入的参数是否在http_method_names 2 查看传入的参数是否是self 本身拥有的属性,只允许传入本身拥有的属性,例如:query_set对象 eg: View.as_view(query_set=User.object.all()) 在URLconf中指定查询数据集为 User的所有实例 """ for key in initkwargs: # 遍历所有的传入字段 if key in cls.http_method_names: # 不允许传入的参数名为 http请求方法名 即http_method_names中定义的 raise TypeError("You tried to pass in the %s method name as a " "keyword argument to %s(). Don't do that." % (key, cls.__name__)) if not hasattr(cls, key): # 不允许传入的参数名为Response/Request没有的属性 raise TypeError("%s() received an invalid keyword %r. as_view " "only accepts arguments that are already " "attributes of the class." % (cls.__name__, key)) def view(request, *args, **kwargs): """ 创建视图函数 初始化视图信息 """ self = cls(**initkwargs) # 实例化视图对象 initkwargs 为as_view()方法传入的参数字典 if hasattr(self, 'get') and not hasattr(self, 'head'): self.head = self.get # 绑定了get方法的请求对象 self.request = request # WSGI请求对象 <django.core.handlers.wsgi.WSGIRequest> self.args = args # 位置参数 URL传入的 self.kwargs = kwargs # 关键字

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django中间件是一种可插拔的组件,用于在请求和响应处理过程中进行预处理和后处理操作。它可以对请求进行修改、验证、记录日志等操作,并且可以在视图函数执行前后进行一些额外的处理。 下面是对Django中间件源码的简要解读: 1. 中间件的定义: Django中间件是一个Python类,它实现了一组特定的方法,用于处理请求和响应。通常,一个中间件类至少需要实现`__init__`和`__call__`方法。 2. 中间件的执行顺序: Django中间件的执行顺序是按照在`MIDDLEWARE`设置中定义的顺序进行的。每个中间件都会依次调用`__call__`方法,处理请求或响应。 3. 请求阶段的中间件方法: - `process_request(request)`:在视图函数执行前被调用,可以对请求进行修改或验证。 - `process_view(request, view_func, view_args, view_kwargs)`:在视图函数执行前被调用,可以对视图函数进行修改或验证。 - `process_exception(request, exception)`:在视图函数抛出异常时被调用,可以对异常进行处理或记录日志。 4. 响应阶段的中间件方法: - `process_response(request, response)`:在视图函数执行后被调用,可以对响应进行修改或处理。 5. 中间件的激活和配置: 在Django的配置文件中,可以通过`MIDDLEWARE`设置来激活和配置中间件。可以指定中间件类的路径,也可以使用Django提供的默认中间件。 以上是对Django中间件源码的简要解读,如果你对某个具体的中间件或方法有更详细的问题,请告诉我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值