Easy Plugin Forms for Django CMS

cmsplugin-form-handler的Python项目详细描述


PyPI VersionBuild StatusCoverage Status

此包提供了一种处理表单提交的机制 Django CMS插件。

跳到下面的Quickstart开始,或查看正确的 documentation

背景和方法

背景

插件是 在django cms项目中创建可重用、可配置的内容片段。由于 他们的灵活性和实用性,项目开发商将受益于发射 表单和使用插件处理表单提交。

由于cms插件是一个页面的片段,所以它们不为 接收和处理提交的表格。当 正在尝试处理表单提交。

接近

为了克服这些限制,这个包中采取的方法是 从子类FormPluginBase向url提交表单 在django cms url空间之外,由^{tt2}处理$ 由这个包裹提供。

ProcessFormView接受表单提交并处理它们,如果有效, 将结果表单发送回插件类进行处理,然后响应 重定向到插件提供的success_url的请求。

在验证错误时,视图将请求重定向回原始 页面并通过会话变量将表单数据提供回插件的表单。

用户体验与预期完全一致,表单的处理是 在没有“抛出HttpRedirectResponses”或任何特殊中间件的情况下执行。

这个包封装了所有额外的逻辑,以便插件开发人员需要 只为子类FormPluginBase,而不是通常的 cms.plugin_base.CMSPluginBase

cms插件中的FormModelForm还应该包括 “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>

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Intellij通过方法中的包查找用法   java中VS代码和打包命名的问题   将java CMS功能集成到具有高度动态内容的网站(Lucene/Mysql/Nosql)的策略   oracle的java类强制转换异常。jdbc。驾驶员OracleConnection   字节码向JVM添加上指令   如何在抽象类中执行java方法?   java是否可以在apache访问日志中排除指定的GET参数?(作者:W7开发环境)   java如何获取已安装音频播放器的列表?   尝试向HS学生展示如何使用Java访问MS数据库   使用正则表达式java对给定行中的特定字符串进行计数   java JOOQ Select查询中的Select计数   方法Java,如何从二维双精度数组中找到特定值?   获取图像URL的java正则表达式   java在切换到新的窗口驱动程序后找不到元素