DjangoCBV源码分析
程序员文章站
2022-03-03 10:53:17
[TOC] FBV FBV是基于函数的视图 CBV CBV是基于类的视图 CBV基本写法 朝login提交get请求会自动执行MyLogin里面的get方法 而提交post请求也会自动执行MyLogin里面的post方法 为什么MyLogin针对不同的请求方法能够自动执行对应的方法??? ......
fbv
fbv是基于函数的视图
cbv
cbv是基于类的视图
cbv基本写法
朝login提交get请求会自动执行mylogin里面的get方法
而提交post请求也会自动执行mylogin里面的post方法
为什么mylogin针对不同的请求方法能够自动执行对应的方法????
同样写在views.py中
from django.views import view class mylogin(view): def get(self,request): return render(request,'login.html') //写功能 def post(self,request): return httpresponse('我是类里面的post方法') /写功能
urls.py中:
# cbv路由配置 url(r'^login/',views.mylogin.as_view()),
cbv源码分析
1.研究源码的突破口
url(r'^login/',views.mylogin.as_view())
猜想:
as_view要么是类里面定义的普通函数 @staticmethod 要么是类里面定义的绑定给类的方法 @classmethod
2.进入源码发现是等价@classmethod类绑定方法,并且返回了view函数名称
3.等价
4.view函数返回self.dispatch(request, *args, **kwargs),进去瞅瞅
5.获取请求方式,并转成小写。进self.http_method_names瞅瞅。判断当前请求方式是否符合默认8个请求方式
6.http_method_names里面是一堆请求方式的列表。8个
7.退到第5步,if判断肯定通过,继续往下走
8.根据返回值get,post自动执行相应的函数
settings源码分析
1.问题抛出。
django settings源码 django暴露给用户一个可以自定义的配置 但是内部也有默认的配置 用户配置了就用用户的 用户没有配就用默认的
django给用户暴露了一个settings.py的文件。用户在里面配置了就用用户的,如果没有配置就用django自己的。原理是如何实现的????