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

[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实现在线视频课堂播放网站源码.zip

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

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

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

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

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

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

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

    django4中文文档

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

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

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

    django笔记 django笔记

    django笔记 django笔记

    Django版Django版

    Django版 Django版 Django版Django版Django版

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

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

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

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

    基于Django的交通设施运维管理系统设计

    基于Django的交通设施运维管理系统设计基于Django的交通设施运维管理系统设计基于Django的交通设施运维管理系统设计基于Django的交通设施运维管理系统设计基于Django的交通设施运维管理系统设计基于Django的交通设施...

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

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

    Python基于Django学生宿舍管理系统源码.zip

    Python基于Django学生宿舍管理系统源码 Python基于Django学生宿舍管理系统源码 Python基于Django学生宿舍管理系统源码 Python基于Django学生宿舍管理系统源码 Python基于Django学生宿舍管理系统源码 Python基于...

    Python基于Django的实战项目源码——美多商城.zip

    Python基于Django的实战项目源码——美多商城 Python基于Django的实战项目源码——美多商城 Python基于Django的实战项目源码——美多商城 Python基于Django的实战项目源码——美多商城 Python基于Django的...

    Python基于Django的在线考试系统源码.zip

    Python基于Django的在线考试系统源码 Python基于Django的在线考试系统源码 Python基于Django的在线考试系统源码 Python基于Django的在线考试系统源码 Python基于Django的在线考试系统源码 Python基于...

Global site tag (gtag.js) - Google Analytics