一个可插入的可定制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 collectstatic或python 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.html和button.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'