Easy Plugin Forms for Django CMS
cmsplugin-form-handler的Python项目详细描述
此包提供了一种处理表单提交的机制 Django CMS插件。
跳到下面的Quickstart开始,或查看正确的 documentation。
背景和方法
背景
插件是 在django cms项目中创建可重用、可配置的内容片段。由于 他们的灵活性和实用性,项目开发商将受益于发射 表单和使用插件处理表单提交。
由于cms插件是一个页面的片段,所以它们不为 接收和处理提交的表格。当 正在尝试处理表单提交。
接近
为了克服这些限制,这个包中采取的方法是 从子类FormPluginBase向url提交表单 在django cms url空间之外,由^{tt2}处理$ 由这个包裹提供。
ProcessFormView接受表单提交并处理它们,如果有效, 将结果表单发送回插件类进行处理,然后响应 重定向到插件提供的success_url的请求。
在验证错误时,视图将请求重定向回原始 页面并通过会话变量将表单数据提供回插件的表单。
用户体验与预期完全一致,表单的处理是 在没有“抛出HttpRedirectResponses”或任何特殊中间件的情况下执行。
这个包封装了所有额外的逻辑,以便插件开发人员需要 只为子类FormPluginBase,而不是通常的 cms.plugin_base.CMSPluginBase。
cms插件中的Form或ModelForm还应该包括 “MIXIN”^ {TT9} $。
快速启动
要快速入门,请先安装软件包:
pip install cmsplugin-form-handler
将包添加到settings.INSTALLED_APPS:
# my_cool_project/settings.py INSTALLED_APPS = ( ... 'cmsplugin_form_handler', )
在URL配置中添加一行:
urlpatterns = i18n_patterns('', url(r'^admin/', include(admin.site.urls)), ... url(r'^plugin_forms/', include('cmsplugin_form_handler.urls', namespace='cmsplugin_form_handler')), url(r'^', include('cms.urls')), )
将^ {TT9}$MIXIN添加到您的^ {TT7} $:
# my_cool_project/forms.py from django import forms from cmsplugin_form_handler.forms import FormPluginFormMixin class MyCoolForm(FormPluginFormMixin, forms.Form): # everything else is your normal form. my_cool_field = forms.CharField(...) ...
或者,如果您使用的是ModelForm:
# my_cool_project/forms.py from django import forms from cmsplugin_form_handler.forms import FormPluginFormMixin class MyCoolModelForm(FormPluginFormMixin, forms.ModelForm): # everything else is your normal form. class Meta: model = MyCoolModel ...
从FormPluginBase:
# my_cool_project/cms_plugins.py from cmsplugin_form_handler.cms_plugins import FormPluginBase class MyCoolPlugin(FormPluginBase): # Use your normal CMSPlugin attributes... render_template = 'plugins/my_cool_plugin.html' # Note that ``cache = False`` will automatically be set # These should be overridden in sub-classes form_class = MyCoolForm # Or, see: get_form_class() success_url = '/static/success/url/here' # Or, see: get_success_url() def render(self, context, instance, placeholder): context = super(MyCoolPlugin, self).render(context, instance, placeholder) # Do your normal thing here ... return context def get_form_class(self, request, instance): # Use this method to programmatically determine the form_class. # This is what this method does by default: return self.form_class def get_success_url(self, request, instance): # Use this method to programmatically determine the success_url. # This is what this method does by default: return self.success_url def form_valid(self, request, instance, form): # Optionally do something with the rendered form here # This is what this method does by default: form.save()
最后,更新插件的模板:
# my_cool_project/templates/plugins/my_cool_plugin.html {% load cmsplugin_form_tags %} <h2>Form Plugin</h2> <form action="{% cmsplugin_form_action %}" method="post"> {% csrf_token %} {{ cmsplugin_form }} <input type="submit"> </form>