1.编辑urls.py:

    url(r'^vmmgmt-vms/$', views.vmmgmt,{'model':models.hvvms,'GET': views.vmmgmt_get_view,'POST': views.vmmgmt_post_view},name='vmmgmt-vms'), #vmmgmt view接收model,GET,POST参数
url(r'^vmmgmt-hv/$', views.vmmgmt,{'model':models.hvsrvs,'GET': views.vmmgmt_get_view,'POST': views.vmmgmt_post_view},name='vmmgmt-hv'),
url(r'^vmmgmt-vhd/$', views.vmmgmt,{'model':models.hvvhds,'GET': views.vmmgmt_get_view,'POST': views.vmmgmt_post_view},name='vmmgmt-vhd'),

2.编辑views.py:

#split get and post requests.
def vmmgmt(request,*args,**kwargs): #从url接收参数,用于区分GET、POST请求
vmmgmt_get_view = kwargs.pop('GET', None) #return None if GET not exists.
vmmgmt_post_view = kwargs.pop('POST', None)
model = kwargs.pop('model', None) #获取当前model
if request.method == 'GET' and vmmgmt_get_view is not None: #GET请求返回到vmmgmt_get_view()函数进行处理
return vmmgmt_get_view(request, model) #将model传递到get view
elif request.method == 'POST' and vmmgmt_post_view is not None:
return vmmgmt_post_view(request, model)
#return vmmgmt_post_view(request, *args, **kwargs)
raise Http404 #handle get request.
def vmmgmt_get_view(request,model):
obj_list = model.objects.all() #从url中的 model 参数接收到具体的model类。模板中要使用 obj_list 变量做for循环
counts = model.objects.count()
assert request.method == 'GET'
if 'q-hv' in request.GET:
qdata = request.GET['q-hv']
if qdata is not None:
obj_list = model.objects.filter(serverip__icontains=qdata)
counts = len(obj_list) if 'q-vms' in request.GET: #Query vm infors.
qdata = request.GET['q-vms']
if qdata is not None:
obj_list = model.objects.filter(Name__icontains=qdata)
print obj_list
counts = len(obj_list) context={'obj_list':obj_list,'counts':counts}
template_name = 'sinfors/vmmgmt_%s.html' % model.__name__.lower() # 每个Python的类都有一个 __name__ 属性返回类名。 这特性在当我们直到运行时刻才知道对象类型的这种情况下很有用。 比如, hvvms 类的 __name__ 就是字符串 'hvvms' 。
#return render_to_response(template_name,context) #无法接收csrfmiddretoken参数
return render(request,template_name,context) #handle post request.
def vmmgmt_post_view(request,model):
assert request.method == 'POST'
if request.POST['posttype'].strip() == 'hvservers_update_create': #update hv servers infors.
sdict = {}
sdict['serverip'] = request.POST['serverip'].strip()
sdict['servername'] = request.POST['servername'].strip()
model.objects.update_or_create(serverip=sdict['serverip'],defaults=sdict)
return HttpResponse(json.dumps({'sts':"修改成功"})) if request.POST['posttype'].strip() == 'vhds_update_create': #update vhd servers infors.
sdict = {}
sdict['vhdname'] = request.POST['vhdname'].strip()
sdict['vhdpath'] = request.POST['vhdpath'].strip()
model.objects.update_or_create(vhdname=sdict['vhdname'],defaults=sdict)
return HttpResponse(json.dumps({'sts':"修改成功"})) if request.POST['posttype'].strip() == 'del': #delete infors.
datas_del = request.POST.getlist('datas_del')
for i in datas_del:
item = model.objects.get(pk=i)
time.sleep(0.1)
item.delete()
return HttpResponse(json.dumps({'sts':"删除成功"})) context={'obj_list':obj_list,'counts':counts}
template_name = 'sinfors/vmmgmt_%s.html' % model.__name__.lower() # 每个Python的类都有一个 __name__ 属性返回类名。 这特性在当我们直到运行时刻才知道对象类型的这种情况下很有用。 比如, hvvms 类的 __name__ 就是字符串 'hvvms' 。
#return render_to_response(template_name,context) #无法接收csrfmiddretoken参数
return render(request,template_name,context)

参考:http://djangobook.py3k.cn/2.0/chapter08/  method_splitter(request, *args, **kwargs)

通用视图-分开处理GET、POST请求的更多相关文章

  1. Django创建通用视图函数

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

  2. Django 1.6 基于类的通用视图

    Django 1.6 基于类的通用视图 最初 django 的视图都是用函数实现的,后来开发出一些通用视图函数,以取代某些常见的重复性代码.通用视图就像是一些封装好的处理器,使用它们的时候只须要给出特 ...

  3. Django通用视图执行过程

    使用通用视图后,Django请求处理过程(以ListView为例):在我们自定义的视图中: class IndexView(ListView): template_name = 'blog/index ...

  4. 5 第一个Django第4部分(表单和通用视图)

    上一节完成了视图编写,这一节为应用添加投票功能,也就是表单提交. 5.1编写一个简单的表单 5.2使用通用视图 5.3改良视图 5.1编写一个简单的表单 在网页设计中添加Form元素 polls/te ...

  5. Django通用视图APIView和视图集ViewSet的介绍和使用

    原 Django通用视图APIView和视图集ViewSet的介绍和使用 2018年10月21日 14:42:14 不睡觉假扮古尔丹 阅读数:630   1.APIView DRF框架的视图的基类是 ...

  6. Python Django CBV下的通用视图函数

    ListView TemplateView DetailView 之前的代码实例基本上都是基于FBV的模式来撰写的,好处么,当然就是简单粗暴..正如: def index(request): retu ...

  7. Django 基于类的通用视图

    在早期,我们认识到在视图开发过程中有共同的用法和模式.这时我们引入基于函数的通用视图来抽象这些模式以简化常见情形的视图开发. 基于函数视图的用法有以下三种: def index(request): r ...

  8. django通用视图

    通用视图 1. 前言 回想一下,在Django中view层起到的作用是相当于controller的角色,在view中实施的 动作,一般是取得请求参数,再从model中得到数据,再通过数据创建模板,返回 ...

  9. Django 1.10中文文档-第一个应用Part4-表单和通用视图

    本教程接Part3开始.继续网页投票应用程序,并将重点介绍简单的表单处理和精简代码. 一个简单表单 更新一下在上一个教程中编写的投票详细页面的模板polls/detail.html,让它包含一个HTM ...

随机推荐

  1. jquery的DataTable按列排序

    不管你用SQL查询数据时,是如何排序的,当数据传递给DataTable时,它会按照它自己的规则再进行一次排序,这个规则就是"order" 可以使用以下代码来进行排序 $('#exa ...

  2. 揭开Future的神秘面纱——结果获取

    前言 在前面的两篇博文中,已经介绍利用FutureTask任务的执行流程,以及利用其实现的cancel方法取消任务的情况.本篇就来介绍下,线程任务的结果获取. 系列目录 揭开Future的神秘面纱—— ...

  3. 资深程序员的Metal入门教程总结

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由落影发表于云+社区专栏 正文 本文介绍Metal和Metal Shader Language,以及Metal和OpenGL ES的差异 ...

  4. org.hibernate.NonUniqueObjectException:a different object with the same identifier value was alread

    转自: http://blog.csdn.net/zzzz3621/article/details/9776539 看异常提示意思已经很明显了,是说主键不唯一,在事务的最后执行SQL时,session ...

  5. intellij idea 怎么全局搜索--转

    https://jingyan.baidu.com/article/29697b9163ac7dab20de3cbf.html intellij idea是一款智能,功能强大的ide,对比eclips ...

  6. JDK并发包中ExecutorCompletionService使用

    相信大家都知道,jdk中ExecutorService是并发编程时使用很频繁的接口,并且使用很方便,那么想在有这么一个场景: 一批任务使用线程池处理,并且需要获得结果,但是不关心任务执行结束后输出结果 ...

  7. 嵌入式Linux安装Dropbear SSH server

    0. 背景 OpenSSH因为其相对较大,一般不太适用于嵌入式平台,多用于PC或者服务器的Linux版本中. Dropbear是一个相对较小的SSH服务器和客户端.它运行在一个基于POSIX的各种平台 ...

  8. [日常] Go语言圣经-并发的非阻塞缓存

    1.go test命令是一个按照约定和组织进行测试的程序2.竞争检查器 go run -race 附带一个运行期对共享变量访问工具的test,出现WARNING: DATA RACE 说明有数据竞争3 ...

  9. Stack源码解析

    我们从一个DEMO作为入口,了解Java的Stack的源码,代码如: Stack<String> stack = new Stack<>(); stack.push(" ...

  10. 积分之迷-2015决赛C语言B组第一题

    标题:积分之迷 小明开了个网上商店,卖风铃.共有3个品牌:A,B,C. 为了促销,每件商品都会返固定的积分. 小明开业第一天收到了三笔订单: 第一笔:3个A + 7个B + 1个C,共返积分:315 ...