django的formpreview更新为使用基于类的视图。
django-cbv-formpreview的Python项目详细描述
用法
我很快会写更好的文档,但现在看看django的 关于其version of this class的文档
这个项目只是一个分叉Django’s FormPreview 上课使用时有一些基本的区别 Django CBV FormPreview的课程版本:
- 通过在 子类。这不是用 表单类(即不执行MyFormPreview(MyForm))
- 将它包含在URLconf中,就像基于普通类一样 视图(即MyFormPreview.as_view())
- 您仍然需要重写done方法,但它只需要 已清除作为参数的form。Django的版本 HttpRequest对象和表单的cleaned_data像所有人一样 基于类的视图,当前的HttpRequest作为 实例属性(即self.request)。
- process_preview方法仍然存在,但它需要 form和它将传递给模板的context。不是的 由于相同的原因,传递HttpRequest对象的时间更长 上面
随着上述向后不兼容的变化 公开记录的行为,源代码中的注释 建议了一些可能有助于重写的方法。方法 get_initial、security_hash和failed_hash用于获取 一个HttpRequest作为参数,但不再用于相同的参数 上述原因需要注意的其他一些变化:
- process_params已被删除args和kwargs 传递到视图的实例属性可用 名字。如果你需要在看到之前对他们做些什么 已处理,重写dispatch,并确保返回对 父方法dispatch(即return super(MyFormPreview, self).dispatch(request, *args, **kwargs)。
- get_auto_id也已被删除。重写get_form_kwargs 如果你需要的话。
如果我遗漏了什么,请告诉我。
背景
来自contrib.formtools应用程序的FormPreview类是 基于类的视图,在Django已经有5年多了原来 由阿德里安·霍洛瓦蒂撰写,自 释放。
从1.3版开始,Django有一个基于类的“受祝福”版本 意见。此包包含^{tt2}的更新版本$ 从新的FormView类继承的。这使得 django中基于类的视图的一致api。特别的 use是由FormMixin类提供的方法,从中 FormView继承。例如,get_form方法为您提供 控制窗体类的实例化这样你就可以 用非标准参数构造一个实例 补丁的原始动机
我最初追求向后兼容,但在使用了这个 在制作过程中,觉得不值得。最后一根稻草是什么时候 我需要对done中的表单调用save方法Django's公司 FormPreview只通过了cleaned_data,我不想 重新构建表单,因为重新清理将不必要地影响 数据库。
我以前申请过ticket 关于django的trac包含原始的向后兼容版本 django 1.4中的django-cbv-formpreview的。现在我已经崩溃了 向后兼容,我不确定核心dev将如何响应 为了它我个人觉得很少有人真的用这个 功能性,因此对社区的影响最小。