`
maplye
  • 浏览: 114591 次
  • 来自: ...
社区版块
存档分类
最新评论

[django]Manipulator解惑

阅读更多
代码下载:/Files/maplye/django/Study914.rar

Manipulator英语翻译成“操纵器”,你可以用它来创建,修改,验证你的一个实体对象,并结合FormWrapper可以自动生成页面上Html代码(注:FormWrapper是用来生成html代码,Manipulator使为FormWrapper提供数据和数据模型等)。
 
django系统已经带有两种Manipulator,一是AddManipulator,二是ChangeManipulator,我以前一直以为这是model的两个方法,还有ChangeManipulator我以为是为我的model更换一个Manipulator,其实他是两个不同的类。这两个类能够自动根据model来生成validation和save。AddManipulator和ChangeManipulator都是继承自Manipulator,不同的是ChangeManipulator带有一objectid的构造参数,并获取一object赋值给他的original_object属性,并在save方法使用修改对象,然后保存该对象。
关于这两种Manipulator的使用,可以参考django document:
 
除了django提供的两种Manipulator,我们还可以自定义Manipulator,这样我们定义自己的fields,validation,save等等。
如:
from django import forms

urgency_choices 
= (
    (
1"Extremely urgent"),
    (
2"Urgent"),
    (
3"Normal"),
    (
4"Unimportant"),
)

class ContactManipulator(forms.Manipulator):
    
def __init__(self):
        self.fields 
= (
            forms.EmailField(field_name
="from", is_required=True),
            forms.TextField(field_name
="subject", length=30, maxlength=200, is_required=True),
            forms.SelectField(field_name
="urgency", choices=urgency_choices),
            forms.LargeTextField(field_name
="contents", is_required=True),
        )
    
def save(self):        #.

而且我们还可以定义带有初始化参数的custom Manipulator
如:
class ContactManipulator(forms.Manipulator):
    
def __init__(self,object_id=None):
        self.object_id 
= object_id
        self.fields 
= (
            forms.EmailField(field_name
="fromEmail", is_required=True),
            forms.TextField(field_name
="subject", length=30, maxlength=200, is_required=True),
            forms.SelectField(field_name
="urgency", choices=urgency_choices),
            forms.LargeTextField(field_name
="contents", is_required=True),
        )

    
def save(self, new_data):
        fromemail 
= new_data["fromEmail"]
        subject 
= new_data["subject"]
        urgency 
= new_data["urgency"]
        contents 
= new_data["contents"]
        
if self.object_id:
            obj 
= Contact.objects.get(pk=int(self.object_id))
            obj.fromEmail 
= fromemail
            obj.subject 
= subject
            obj.urgency 
= urgency;
            obj.contents 
= contents;
        
else:
            obj 
= Contact(fromEmail=fromemail, subject=subject, urgency=urgency,contents=contents)
        obj.save()
你看上面ContactManipulator的Manipulator就具有AddManipulator和ChangeManipulator两个的功能,
那这个ContactManipulator应该怎么用呢
#创建   
def contact_form(request):
    manipulator 
= ContactManipulator()
    
if request.POST:
        new_data 
= request.POST.copy()
        errors 
= manipulator.get_validation_errors(new_data)
        
if not errors:
            manipulator.do_html2python(new_data)

            manipulator.save(new_data)
            
return HttpResponseRedirect("/formapp/contact/")
    
else:
        errors 
= new_data = {}
        
    form 
= forms.FormWrapper(manipulator, new_data, errors)
    
return render_to_response('places/contact_form.html', {'form': form})

#修改
def editcontact(request,contactid):
    manipulator 
= ContactManipulator(contactid)
    
    
if request.POST:
        new_data 
= request.POST.copy()
        errors 
= manipulator.get_validation_errors(new_data)
        
if not errors:
            manipulator.do_html2python(new_data)
            manipulator.save(new_data)

            
# Do a post-after-redirect so that reload works, etc.
            return HttpResponseRedirect("/formapp/contact/1")
    
else:
        errors 
= {}        
        contact 
= Contact.objects.get(id = contactid)
        new_data 
= contact.__dict__
    
    form 
= forms.FormWrapper(manipulator, new_data,errors )
    
return render_to_response('places/contact_form.html', {'form': form})        

以上是我在学习Manipulator时一些个人理解,暂时记录如此,以后我会更深入的了解他们,同时非常感谢limodou的解惑,他真是个热心人,向他学习!
分享到:
评论

相关推荐

    django电子商务网站源码.zip

    django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django...

    Django实现商城网站源码.zip

    Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django...

    Django客户管理系统源码.zip

    Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统...

    基于Django的个人网盘源码.zip

    基于Django的个人网盘源码 基于Django的个人网盘源码 基于Django的个人网盘源码 基于Django的个人网盘源码 基于Django的个人网盘源码 基于Django的个人网盘源码 基于Django的个人网盘源码 基于Django...

    Python基于Django的就业系统源码.zip

    基于Django就业系统源码 基于Django就业系统源码 基于Django就业系统源码 基于Django就业系统源码 基于Django就业系统源码 基于Django就业系统源码 基于Django就业系统源码 基于Django就业系统源码 基于...

    django笔记 django笔记

    Django是Python编程语言中的一款强大且流行的Web框架,它以“快速开发”和“约定优于配置”的理念为核心,让开发者能够高效地构建高质量的Web应用程序。本笔记将深入探讨Django的基础概念、核心功能以及实际应用。 ...

    django项目实例(django 简易博客开发)

    前几天写的django 简易博客开发记录,贴个链接吧 django 简易博客开发 1 安装、创建、配置、admin使用 http://www.cnblogs.com/cacique/archive/2012/09/29/2707976.html django 简易博客开发 2 模板和数据查询 ...

    django4中文文档

    django4最新中文文档+适合python初学或者初次接触django4的开发者 从事Python编程工作的人员,一定听说过这三个框架:Django、Flask、Tornado,它们就像神一样的存在 Django是最有代表性的一种。许多成功的网站和APP...

    Django实现在线视频课堂播放网站源码.zip

    Django实现在线视频课堂播放网站源码 Django实现在线视频课堂播放网站源码 Django实现在线视频课堂播放网站源码 Django实现在线视频课堂播放网站源码 Django实现在线视频课堂播放网站源码 Django实现在线视频...

    Django从零开发的个人博客网站源码.zip

    Django从零开发的个人博客网站源码 Django从零开发的个人博客网站源码 Django从零开发的个人博客网站源码 Django从零开发的个人博客网站源码 Django从零开发的个人博客网站源码 Django从零开发的个人博客...

    django+scrapy结合

    本篇文章将详细探讨如何将两个强大的Python库——Django和Scrapy结合,以实现通过Django的Web界面控制Scrapy爬虫的运行,并将爬取的数据存入数据库。 首先,让我们了解这两个框架的基本概念。Django是一个高级的Web...

    使用Django框架开发的企业OA管理系统源码.zip

    使用Django框架开发的企业OA管理系统源码 使用Django框架开发的企业OA管理系统源码 使用Django框架开发的企业OA管理系统源码 使用Django框架开发的企业OA管理系统源码 使用Django框架开发的企业OA管理系统源码 ...

    Django_layui后台模板

    【Django_layui后台模板】是一个专门为Django框架设计的、基于Layui前端框架的后台管理模板。Django是Python开发的一款高级Web框架,它强调代码的可读性和简洁性,而Layui则是一款轻量级的前端UI框架,提供了丰富的...

    基于DJango开发的仓库管理系统源码.zip

    基于DJango开发的仓库管理系统,软件架构:python 3.5、django 2.2、MySQL 基于DJango开发的仓库管理系统,软件架构:python 3.5、django 2.2、MySQL 基于DJango开发的仓库管理系统,软件架构:python 3.5、...

    django4.0官方中文文档

    《Django 4.0 官方中文文档详解》 Django 4.0 是一个强大的、免费且开源的Web框架,由Python编程语言编写,主要用于构建高效、可扩展的Web应用。它遵循“DRY”(Don't Repeat Yourself)原则,强调代码重用和快速...

    基于Django的疫情上报系统源码.zip

    基于Django的疫情上报系统源码 基于Django的疫情上报系统源码 基于Django的疫情上报系统源码 基于Django的疫情上报系统源码 基于Django的疫情上报系统源码 基于Django的疫情上报系统源码 基于Django的...

    使用Django开发的天天生鲜商城源码.zip

    使用Django开发的天天生鲜商城源码 使用Django开发的天天生鲜商城源码 使用Django开发的天天生鲜商城源码 使用Django开发的天天生鲜商城源码 使用Django开发的天天生鲜商城源码 使用Django开发的天天生鲜...

    django4.1中文手册

    Django 文档¶ 你所需要知道的关于 Django 的一切。 快速入门¶ 你是刚学 Django 或是初学编程? 这就是你开始学习的地方! 从零开始: 概要 | 安装 入门教程: 第 1 节:请求和响应 | 第 2 节:模型和管理站点 | ...

    Django + python + mysql的在线考试系统源码.zip

    Django + python + mysql的在线考试系统源码 Django + python + mysql的在线考试系统源码 Django + python + mysql的在线考试系统源码 Django + python + mysql的在线考试系统源码 Django + python + mysql的...

    django开发完美博客

    在本项目中,“django开发完美博客”是一个使用Python的Django框架构建的高效且功能完备的博客系统。Django是一个高级的Web应用框架,它强调可重用性和“开箱即用”的理念,使得开发者可以快速地搭建和维护高质量的...

Global site tag (gtag.js) - Google Analytics