1.编辑urls.py:

  1. 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参数
  2. url(r'^vmmgmt-hv/$', views.vmmgmt,{'model':models.hvsrvs,'GET': views.vmmgmt_get_view,'POST': views.vmmgmt_post_view},name='vmmgmt-hv'),
  3. 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:

  1. #split get and post requests.
  2. def vmmgmt(request,*args,**kwargs): #从url接收参数,用于区分GET、POST请求
  3. vmmgmt_get_view = kwargs.pop('GET', None) #return None if GET not exists.
  4. vmmgmt_post_view = kwargs.pop('POST', None)
  5. model = kwargs.pop('model', None) #获取当前model
  6. if request.method == 'GET' and vmmgmt_get_view is not None: #GET请求返回到vmmgmt_get_view()函数进行处理
  7. return vmmgmt_get_view(request, model) #将model传递到get view
  8. elif request.method == 'POST' and vmmgmt_post_view is not None:
  9. return vmmgmt_post_view(request, model)
  10. #return vmmgmt_post_view(request, *args, **kwargs)
  11. raise Http404
  12.  
  13. #handle get request.
  14. def vmmgmt_get_view(request,model):
  15. obj_list = model.objects.all() #从url中的 model 参数接收到具体的model类。模板中要使用 obj_list 变量做for循环
  16. counts = model.objects.count()
  17. assert request.method == 'GET'
  18. if 'q-hv' in request.GET:
  19. qdata = request.GET['q-hv']
  20. if qdata is not None:
  21. obj_list = model.objects.filter(serverip__icontains=qdata)
  22. counts = len(obj_list)
  23.  
  24. if 'q-vms' in request.GET: #Query vm infors.
  25. qdata = request.GET['q-vms']
  26. if qdata is not None:
  27. obj_list = model.objects.filter(Name__icontains=qdata)
  28. print obj_list
  29. counts = len(obj_list)
  30.  
  31. context={'obj_list':obj_list,'counts':counts}
  32. template_name = 'sinfors/vmmgmt_%s.html' % model.__name__.lower() # 每个Python的类都有一个 __name__ 属性返回类名。 这特性在当我们直到运行时刻才知道对象类型的这种情况下很有用。 比如, hvvms 类的 __name__ 就是字符串 'hvvms' 。
  33. #return render_to_response(template_name,context) #无法接收csrfmiddretoken参数
  34. return render(request,template_name,context)
  35.  
  36. #handle post request.
  37. def vmmgmt_post_view(request,model):
  38. assert request.method == 'POST'
  39. if request.POST['posttype'].strip() == 'hvservers_update_create': #update hv servers infors.
  40. sdict = {}
  41. sdict['serverip'] = request.POST['serverip'].strip()
  42. sdict['servername'] = request.POST['servername'].strip()
  43. model.objects.update_or_create(serverip=sdict['serverip'],defaults=sdict)
  44. return HttpResponse(json.dumps({'sts':"修改成功"}))
  45.  
  46. if request.POST['posttype'].strip() == 'vhds_update_create': #update vhd servers infors.
  47. sdict = {}
  48. sdict['vhdname'] = request.POST['vhdname'].strip()
  49. sdict['vhdpath'] = request.POST['vhdpath'].strip()
  50. model.objects.update_or_create(vhdname=sdict['vhdname'],defaults=sdict)
  51. return HttpResponse(json.dumps({'sts':"修改成功"}))
  52.  
  53. if request.POST['posttype'].strip() == 'del': #delete infors.
  54. datas_del = request.POST.getlist('datas_del')
  55. for i in datas_del:
  56. item = model.objects.get(pk=i)
  57. time.sleep(0.1)
  58. item.delete()
  59. return HttpResponse(json.dumps({'sts':"删除成功"}))
  60.  
  61. context={'obj_list':obj_list,'counts':counts}
  62. template_name = 'sinfors/vmmgmt_%s.html' % model.__name__.lower() # 每个Python的类都有一个 __name__ 属性返回类名。 这特性在当我们直到运行时刻才知道对象类型的这种情况下很有用。 比如, hvvms 类的 __name__ 就是字符串 'hvvms' 。
  63. #return render_to_response(template_name,context) #无法接收csrfmiddretoken参数
  64. 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. mysql 根据一张表更新另一张表

    between 是>= and <=,即包含两个边界

  2. 程序员必知的8大排序(二)-------简单选择排序,堆排序(java实现)

    程序员必知的8大排序(一)-------直接插入排序,希尔排序(java实现) 程序员必知的8大排序(二)-------简单选择排序,堆排序(java实现) 程序员必知的8大排序(三)-------冒 ...

  3. C# DateTime 转 JavaScript Date

    @{ var minTicks = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).Ticks; var nowTicks = DateTime ...

  4. mysql日志查看

    https://www.2cto.com/database/201201/116116.html 是否启用了日志mysql>show variables like 'log_bin'; 怎样知道 ...

  5. es6学习笔记6--Generator 函数

    基本概念 Generator函数有多种理解角度.从语法上,首先可以把它理解成,Generator函数是一个状态机,封装了多个内部状态. 执行Generator函数会返回一个遍历器对象,也就是说,Gen ...

  6. stack堆栈容器、queue队列容器和priority_queue优先队列容器(常用的方法对比与总结)

    stack堆栈是一个后进先出的线性表,插入和删除元素都在表的一端进行. stack堆栈的使用方法: 采用push()方法将元素入栈: 采用pop()方法将元素出栈: 采用top()方法访问栈顶元素: ...

  7. Quart2D文字图像绘制

    上一个是绘制简单图形,这一篇学习绘制文字.图像 //获取画布 CGContextRef context=UIGraphicsGetCurrentContext(); //设置边框颜色 CGContex ...

  8. hive 中的正则表达式

    背景: 前几天拿来apache日志,用hive的正则进行匹配,发现匹配出来的字段算是NULL,但是我用RegexBuddy工具显示能够匹配的到啊!例子如下(我拿正常的apache日志来比较,我的apa ...

  9. 新版TeamTalk部署教程

    新版TeamTalk部署教程 新版TeamTalk已经在2015年03月28日发布了,目前版本定为1.0.0版本,后续版本号会按照如下规则进行:1.版本规则按照x.y.z的形式进行.2.各端小bug修 ...

  10. Guava RateLimiter实现接口API限流

    一.简介 Guava提供的RateLimiter可以限制物理或逻辑资源的被访问速率.RateLimit二的原理类似与令牌桶,它主要由许可发出的速率来定义,如果没有额外的配置,许可证将按每秒许可证规定的 ...