1.视图函数的分类

  FBV(fucntion base view)

  CBV(class base view) ,CBV根据定义的方法名 ,判断什么请求执行什么函数

2.FBV转换CBV (不太对劲)

  在CBV的url中指定执行类名.as_view()方法 ,根据源码得知dispatch函数中执行了我们自定义的类中方法 !

####################FBV
def pressedit(request, edit_id, test_id):
obj = models.presslist.objects.get(pk=edit_id)
print(test_id, edit_id)
msg = ''
if request.method == 'POST':
obj.name = request.POST.get('pressname') if models.presslist.objects.filter(name=obj.name):
msg = '已存在' if not obj.name:
msg = '不能为空' if not models.presslist.objects.filter(name=obj.name) and obj.name:
obj.save() return redirect(reverse('presslist'))
return render(request, 'cbsadd-edit.html', {'obj': obj, 'msg': msg})
#######################CBV
class pressedit1(View):
def get(self, request, edit_id, test_id):
obj = models.presslist.objects.get(pk=edit_id)
msg = ''
print(edit_id, test_id)
print(id(obj)) return render(request, 'cbsadd-edit.html', {'obj': obj, 'msg': msg}) def post(self, request, edit_id, test_id):
msg = ''
obj = models.presslist.objects.get(pk=edit_id)
obj.name = request.POST.get('pressname')
print(id(obj))
if models.presslist.objects.filter(name=obj.name):
msg = '已存在' if not obj.name:
msg = '不能为空' if not models.presslist.objects.filter(name=obj.name) and obj.name:
obj.save() return redirect(reverse('presslist'))
return render(request, 'cbsadd-edit.html', {'obj': obj, 'msg': msg})

3.视图函数使用装饰器

import time
import functools
from django.utils.decorators import method_decorator
def wapp(func):
@functools.wraps(func)
def inner(*args, **kwargs):
time1 = time.time()
ret = func(*args, **kwargs)
print(time.time() - time1)
return ret return inner
#######FBV
#url
url(r'^press/edit/(?P<edit_id>\d+)/(?P<test_id>\d+)/', views.pressedit, name='pressedit'),
#views
@wapp
def presslist(request):
msg_all = models.presslist.objects.all()
return render(request, 'cbs.html', {'msg': msg_all}) #######CBV
#url
url(r'^press/edit/(?P<edit_id>\d+)/(?P<test_id>\d+)/', views.pressedit1.as_view(), name='pressedit'),

 #views

@method_decorator(wapp, name='get')    ###通过method_decorator这个装饰器指定自己的装饰器 和要装饰的函数 ,可以直接作用dispatch函数,对所有函数生效
class pressedit1(View): def get(self, request, edit_id, test_id, msg=''):
obj = models.presslist.objects.get(pk=edit_id)
return render(request, 'cbsadd-edit.html', {'obj': obj, 'msg': msg}) def post(self, request, edit_id, test_id):
msg = ''
obj = models.presslist.objects.get(pk=edit_id)
obj.name = request.POST.get('pressname')
if models.presslist.objects.filter(name=obj.name):
msg = '已存在'
if not obj.name:
msg = '不能为空'
if not models.presslist.objects.filter(name=obj.name) and obj.name:
obj.save()
return redirect(reverse('presslist'))
return self.get(request, edit_id, test_id, msg)

最新文章

  1. jQuery解决iframe高度自适应代码
  2. 有关JVM配置参数含义
  3. 张艾迪:全面开放“A&quot;计划
  4. 同时使用Junit4的@Parameterized参数化测试和Spring容器
  5. [VBS脚本]定时提示并关闭计算机
  6. the usage of key word &quot;static&quot; in java language
  7. Unable to locate package update
  8. TCP粘包的拆包处理
  9. qmake使用实践:包含动态库的Qt4工程
  10. PHP设计模式之装饰器模式
  11. canvas 从初级到XX 1# 部分非基础原生API的使用 [初级向]
  12. 用.Net Core控制台模拟一个ASP.Net Core的管道模型
  13. Apache ActiveMQ实战(1)-基本安装配置与消息类型
  14. git 取消对某个文件的跟踪
  15. IDEA15 下运行Scala遇到问题以及解决办法
  16. springmvc+mybatis环境搭建
  17. BCode解码练习
  18. Android @id和@+id区别
  19. web前端开发常用组件
  20. Codeforces Beta Round #94 (Div. 1 Only)B. String sam

热门文章

  1. 2019年百度最新Java工程师面试题
  2. Spring Boot可执行Jar包运行原理
  3. css实现左右两个div等高
  4. java架构之-负载均衡-Ribbon 的使用
  5. Python3---标准库---urllib
  6. Flask 教程 第九章:分页
  7. Servlet、Jsp
  8. localstorage实现两个页面通信,购物车原理。
  9. SAP系统邮件功能配置
  10. docker tomcat8 mysql8部署常见错误