[oldboy-django][2深入django]FBV + CBV + 装饰器
2024-08-30 00:54:40
FBV
django CBV & FBV
- FBV function basic view
a. urls 设置
urls(r'^test.html$', views.test)
b. views写法
def test(request):
return ...
c. FBV添加装饰器
- 定义装饰器
def wrapper(func):
def inner(*args, **kwargs):
return func(*args, **kwargs)
return inner - 使用装饰器方法
@wrapper
def test(request):
pass
CBV
- CBV class basic view
a. urls 设置
urls(r'^login.html$', views.Login.as_view())
b. views写法
from django.views import View
class Login(View):
def get(self,request):
return render(request, 'login.html') def post(self,request):
return HttpResponse("dd")
c. 注意事项
- urls 里面 views.类名.as_view() 固定写法
- views的类
a.需要继承from django.views import View
b.函数需要一个参数request
c.函数名字:get, post, put, delete
- 函数名字对应请求类型
- form表单只能是get和post提交
- ajax提交数据可以是get, post, put, delete
- get(查),post(创建), put(更新), delete(删) d.dispatch函数实现get, post执行前后定制一些操作
- dispatch作用
函数发送请求到url后,CBV第一步调用的是dispatch函数,然后再执行get,post函数
其实是在dispatch函数里面调用get,post函数
- 自定义dispatch函数
def dispatch(self, request, *args, **kwargs):
print('before')
obj = super(Login,self).dispatch(request, *args, **kwargs)
print('after')
return obj
CBV添加装饰器
f CBV添加装饰器(django有限制)
- 定义装饰器
def wrapper(func):
def inner(*args, **kwargs):
return func(*args, **kwargs)
return inner - 导入django使用FBV装饰器的方法
from django.utils.decorators import method_decorator - 添加装饰器方式
. 在类里面的多个函数添加
class Foo(View): @method_decorator(wrapper)
def get(self,request):
pass @method_decorator(wrapper)
def post(self,request):
pass .对类的多个函数都添加装饰器
@method_decorator(wrapper, name='post')
@method_decorator(wrapper, name='get')
class Foo(View): .对类所有函数添加装饰器
@method_decorator(wrapper, name='dispatch')
class Foo(View): # 请求来了,到dispatch函数,dispatch根据反射调用不同的函数
最新文章
- MyEclipse破解(MEGen.java)
- 最长公共子序列(LCS)
- Spark Streaming中向flume拉取数据
- javascript预解析和作用域
- bzoj3244
- 【Java】Java8新增的Lambda表达式_学习笔记
- How to change current process to background process
- uiautomator +python 实现安卓自动化
- 关于系统首页绘制问题(ext布局+c#后台加入数据)经html输出流输出响应client
- jsp中EL表达式不起作用的问题1
- Tomcat8远程访问manager,host-manager被拒绝403
- 分布式系统关注点(17)——先写DB还是「缓存」?
- CADisplayLink以及定时器的使用
- Service Mesh
- python之名称空间
- fork多线程进程时的坑(转)
- Docker用途 &; 和tomcat的区别
- 实验吧ctf题库web题wp
- iOS 严重问题解释(crash)
- 简述组件化解决方案CTMediator与MGJRouter的主要思想