一个可插入的可定制django应用程序,用于收集网站访问者的反馈。

django-writeback的Python项目详细描述


writeback是一个可插入的可定制django应用程序,用于使用ajax从网站访问者那里收集反馈。

安装

使用pip安装:

pip install django-writeback

快速启动

  • 将“写回”添加到已安装的应用程序设置中,如下所示:

    INSTALLED_APPS += ('writeback', )
    
  • 将上下文处理器添加到模板上下文处理器设置中,如下所示:

    TEMPLATE_CONTEXT_PROCESSORS += ('writeback.context.add_form', )
    
  • 指定电子邮件设置“写回电子邮件通知”主题、“写回电子邮件通知”发件人和“写回电子邮件通知”收件人列表。这些将用于电子邮件通知。

  • 运行python manage.py syncdb以同步数据库。

  • 如果要省略管理应用程序的静态收集,请运行python manage.py collectstaticpython manage.py collectstatic -i admin

  • 在项目url.py中包含写回urlconf,如下所示:

    url(r'^writeback/', include('writeback.urls')),
    
  • 修改基本模板:

    <!-- in header block -->
    {% include "writeback/header.html" %}
    
    <!-- in body block -->
    {% include "writeback/button.html" %}
    
  • 重写email_notification.htmlbutton.html模板。

模型定制

用于收集反馈的Message模型可以扩展:

  • 创建一个应用程序,例如custom_writeback和一个文件,该文件应包含类声明,例如命名为models.py

  • 将这个新创建的应用程序添加到您的INSTALLED_APPS设置中,如下所示:

    INSTALLED_APPS += ('custom_writeback', )
    
  • 重新声明抽象模型类,或者,如果要扩展基本模型,请从writeback.models.MessageAbstract继承它,如下所示:

    from writeback.models import MessageAbstract
    
    
    class MyMessageAbstract(MessageAbstract):
        # define your custom fields
    
        class Meta(MessageAbstract.Meta):
            pass
    
  • 在项目的settings.py

    中注册类
    WRITEBACK_MESSAGE_BASE_MODEL = 'custom_writeback.models.MyMessageAbstract'
    
  • 定义一个新表单,用于新模型。

表单自定义

如果您已经重写或自定义了Message模型,那么您很可能需要自定义表单。但即使使用原始模型,也可能需要更改clean()方法的形式。

  • 创建一个应用程序,例如custom_writeback(如果您还没有)一个包含类声明的文件,例如命名为forms.py

  • 将这个新创建的应用程序添加到您的INSTALLED_APPS设置中,如下所示:

    INSTALLED_APPS += ('custom_writeback', )
    
  • 像这样声明您的新表单类:

    from django.utils.translation import ugettext_lazy as _
    from django.forms import ValidationError
    
    from writeback.forms import MessageCreateFormBase
    from writeback.models import Message
    
    
    class MessageCreateForm(MessageCreateFormBase):
        class Meta:
            model = Message
            exclude = ['date_created', 'middle_name', 'company', 'info']
    
        def clean(self):
            cleaned_data = super(MessageCreateFormBase, self).clean()
            name = cleaned_data.get("name")
            family_name = cleaned_data.get("family_name")
            phone = cleaned_data.get("phone")
            email = cleaned_data.get("email")
    
            if not (name or family_name or phone or email):
                raise ValidationError(_("Please, fill out at least one field."))
    
            return super(MessageCreateFormBase, self).clean()
    
  • 在项目的settings.py

    中注册类
    WRITEBACK_MESSAGE_BASE_FORM = 'custom_writeback.forms.MessageCreateForm'
    

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

推荐PyPI第三方库


热门话题
java如何提高我的软件项目的速度?   java将Jetty嵌入JavaSE项目   数组中的java重复字符   java我的Shell排序没有按预期工作,我需要一些帮助来找出我做错了什么   java如何在JBoss EAP6/AS7中应用先过滤后安全约束   java使用一个随机运算符来处理多个变量   java为什么我不能在文件中写我的二叉树?   java应用程序不会在Eclipse emulator上运行   我第一次尝试制作一个简单的基于瓷砖的java游戏   java为TermVectors安装Solr修补程序   java无法将更新的对象值从客户端发送到服务器,服务器读取不存在的值   Azure,java sdk,使用ARM模板部署无法转换参数文件   是否有一个Java等价于空合并运算符(?)在C#?   java如果只初始化了超类对象,是否可以调用特定于子类的方法?   向类文件传递值时出现java NullPointerException   java模不起作用   java Android TranslateAnimation动态更新布局的大小   数据结构如何在java中实例化队列对象?   java如果用户选择一些随机的相机应用程序,如何在安卓中正确处理相机意图?