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)

django3-视图函数进阶的更多相关文章

  1. Django视图函数

    一.视图函数 1. 视图函数的第一个参数一定是一个HTTPRequest类型的对象,这个对象是Django自动创建的,具体形参名通常用request.通过这个对象,可以调用请求的一些参数,比如requ ...

  2. Django创建模板、URL模式、创建视图函数

    1.在应用目录下创建模板(templates目录) 在模板目录下创建archive.html <!DOCTYPE html> <html lang="en"> ...

  3. Flask04 后台获取请求数据、视图函数返回类型、前台接受响应数据

    1 后台获取请求数据 1.1 提出问题 前台发送请求的方式有哪些 后台如何获取这些请求的参数 1.2 前台发送请求的方式 GET.POST.AJAX 点睛:如果不指定请求方式,浏览器默认使用GET请求 ...

  4. Django创建通用视图函数

    想在我们有两个视图: def thinkingview(request): user = request.user if request.method == 'GET': return render( ...

  5. Django - - - -视图层之视图函数(views)

    视图层之视图函数(views) 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档 ...

  6. python web框架篇:views视图函数

    Django请求的生命周期是怎样的? 简单地说,通过URL对应关系匹配 ->找到对应的函数(或者类)->返回字符串(或者读取Html之后返回渲染的字符串) 解剖起来如下: 1. 当用户在浏 ...

  7. 深入理解javascript函数进阶系列第一篇——高阶函数

    前面的话 前面的函数系列中介绍了函数的基础用法.从本文开始,将介绍javascript函数进阶系列,本文将详细介绍高阶函数 定义 高阶函数(higher-order function)指操作函数的函数 ...

  8. flask 视图函数的使用

    flask框架 视图函数当中 各种实用情况简单配置 1 建立连接 2 路由参数 3 返回网络状态码 4 自定义错误页面 5 重定向 6 正则url限制 和 url 优化 7 设置和获取cookie # ...

  9. Django Views(视图函数)

    http请求中产生两个核心对象: http请求:HttpRequest对象 http响应:HttpResponse对象 所在位置:django.http 之前我们用到的参数request就是HttpR ...

  10. Flask实战第6天:视图函数Response返回值

    视图函数的返回值会被自动转换为一个响应对象,Flask的转换逻辑如下: 如果返回的是一个合法的响应对象,则直接返回 可以使用make_response函数来创建Response对象,这个方法可以设置额 ...

随机推荐

  1. 原生js实现on和emit

    let obj = {}; const $on = (name,fn)=>{ if(!obj[name]){ obj[name] = []; } obj[name].push(fn); } co ...

  2. SpringBoot2.0 整合 FastDFS 中间件,实现文件分布式管理

    本文源码:GitHub·点这里 || GitEE·点这里 一.FastDFS简介 1.FastDFS作用 FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步 ...

  3. VUE Base64编码图片展示与转换图片

    图片的 base64 编码就是可以将一副图片数据编码成一串字符串,使用该字符串代替图像地址,使用 base64 传输图片文件可以节省一个 http 请求,图片的 base64 编码可以算是前端优化的一 ...

  4. [问题排查]通过调度系统远程执行脚本,报mysql command not found异常

    今天在公司使用LS调度系统(百度内部的工具),执行远程脚本的时候,每次都失败. 脚本内容比较简单,其实就是将HDFS(AFS)中的数据插入到Palo(Doris)数据库中,脚本如下: mysql -h ...

  5. Response to 16岁的篮球投手

    关于篮球,我想写的很多,被偏爱的运动,被赞美的运动,带着青春的万丈光泽. 我们对易建联的苛刻是因为想当然,对大侄子的溺爱是因为急功近利.过于娱乐化和商业化,让一项竞技体育变得像是豆瓣八组的吃瓜盛宴. ...

  6. C#中获取指定目录下所有目录的名称、全路径和创建日期

    场景 指定一个路径,根据这个父级路径获取此目录下所有目录的名称.全路径.创建日期等信息. 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众 ...

  7. 在Windows下配置多个git账号

    1.生成并部署SSH key 安装好Git客户端后,打开git bash,输入以下命令生成user1的SSH Key: ssh-keygen -t rsa -C "user1@email.c ...

  8. FCC---Use the CSS Transform scale Property to Scale an Element on Hover

    The transform property has a variety of functions that let you scale, move, rotate, skew, etc., your ...

  9. DenyHosts

    下载软件并解压cd DenyHosts-2.6 #进入安装解压目录python setup.py install #安装DenyHostscd /usr/share/denyhosts/ #默认安装路 ...

  10. Python程序中的线程操作-守护线程

    目录 一.守护线程 1.1 详细解释 1.2 守护线程例1 1.3 守护线程例2 一.守护线程 无论是进程还是线程,都遵循:守护xx会等待主xx运行完毕后被销毁.需要强调的是:运行完毕并非终止运行. ...