日期和日期时间字段的基于javascript的小部件。

zc.datetimewidget的Python项目详细描述


这个包提供了两种类型的小部件,日期小部件 和一个日期时间小部件。

Datetime and Date Widgets

这个包提供了两种类型的小部件,日期小部件 和一个日期时间小部件。

Date Widget

Date小部件只处理DateTime.Date对象,而不是 时区感知。我们使用演示包在这里有一个内容类。

>>> from zope import component
>>> from datetime import datetime, date
>>> from zc.datetimewidget import datetimewidget
>>> from zc.datetimewidget.demo.content import DemoContent
>>> from zc.datetimewidget.demo.interfaces import IDemoContent
>>> from zope.publisher.browser import TestRequest, BrowserLanguages
>>> component.provideAdapter(BrowserLanguages)
>>> request = TestRequest(HTTP_ACCEPT_LANGUAGE='en-US')
>>> field = IDemoContent['startDate']
>>> widget = datetimewidget.DateWidget(field,request)
>>> widget._toFormValue(None)
u''

现在让我们转换一个真正的日期。

>>> d = date(2006,5,1)
>>> formValue = widget._toFormValue(d)
>>> formValue
'2006-05-01'
>>> parsedValue = widget._toFieldValue(formValue)
>>> parsedValue
datetime.date(2006, 5, 1)

小部件处理与zope的默认date widget相同的日期标记。

>>> widget._toFieldValue('2006/12/31')
datetime.date(2006, 12, 31)

Datetime Widget

日期时间总是存储有时区意识的,默认情况下是UTC 使用时区。

为了正确处理时区,zope实例必须 提供从ibrowserrequest到itzinfo的适配器。这取决于 实例它使用哪种实现。为了这次测试,我们只是 使用demo.timezone模块的实现,它总是 返回欧洲/维也纳作为时区。

字段缺少值将导致空字符串。

>>> import pytz
>>> from zc.datetimewidget.demo import timezone
>>> component.provideAdapter(timezone.tzinfo)
>>> tz = pytz.timezone('Europe/Vienna')
>>> request = TestRequest(HTTP_ACCEPT_LANGUAGE='en-US')
>>> field = IDemoContent['startDatetime']
>>> widget = datetimewidget.DatetimeWidget(field,request)
>>> widget._toFormValue(None)
u''

现在让我们转换一个真正的日期时间。

>>> dt = datetime(2006,5,1,12,tzinfo=pytz.utc)
>>> formValue = widget._toFormValue(dt)
>>> formValue
'2006-05-01 14:00:00'
>>> parsedValue = widget._toFieldValue(formValue)
>>> parsedValue
datetime.datetime(2006, 5, 1, 12, 0, tzinfo=<UTC>)

日期时间也可能是一个天真的时间(没有时区),但它 使用UTC时区信息保存。

>>> naive_dt = datetime(2006,5,1,12)
>>> formValue = widget._toFormValue(naive_dt)
>>> formValue
'2006-05-01 12:00:00'
>>> parsedValue = widget._toFieldValue(formValue)
>>> parsedValue
datetime.datetime(2006, 5, 1, 10, 0, tzinfo=<UTC>)

当小部件尝试分析形式为%y-%m-%d%h的日期时:%m:%s' 首先,它将涉及到核心的特定于地区的解析 DateTimeWidget。

>>> widget._toFieldValue('May 1, 2006 2:00:00 PM')
datetime.datetime(2006, 5, 1, 12, 0, tzinfo=<UTC>)

Calendar Widget

Configuration

>>> from zope.interface.verify import verifyObject
>>> from zc.datetimewidget.datetimewidget import (
...     CalendarWidgetConfiguration, ICalendarWidgetConfiguration)

让我们创建一个标准配置对象:

>>> conf = CalendarWidgetConfiguration('field.x')
>>> verifyObject(ICalendarWidgetConfiguration, conf)
True

字段有其默认值:

>>> conf.daFormat
u'%Y/%m/%d'
>>> conf.singleClick
True
>>> print conf.flat
None

我们可以在实例化期间自定义一些属性:

>>> import datetime
>>> conf = CalendarWidgetConfiguration('x', date=datetime.date(2006, 8, 25))
>>> conf.date
datetime.date(2006, 8, 25)

Dumping JavaScript

配置可以作为javascript转储。首先是空配置:

>>> print CalendarWidgetConfiguration('field.x').dumpJS()
Calendar.setup({
<BLANKLINE>
});

现在,让我们添加一些自定义设置:

>>> conf = CalendarWidgetConfiguration('x', daFormat=u'%m-%d',
...     inputField='inp', eventName=None, date=conf.date)
>>> print conf.dumpJS()
Calendar.setup({
  inputField: 'inp',
  eventName: null,
  daFormat: '%m-%d',
  date: new Date(2006, 7, 25)
});

不接受无效参数:

>>> conf = CalendarWidgetConfiguration('x', foo='bar')
Traceback (most recent call last):
    ...
ValueError: unknown arguments: foo

Date set widget

>>> from zc.datetimewidget.datetimewidget import DateSetWidget
>>> from zope.schema import Set
>>> from zope.publisher.browser import TestRequest
>>> class Context(object):
...     somedates = set()
>>> context = Context()
>>> request = TestRequest()
>>> field = Set(__name__='somedates')
>>> field.set(context, set([datetime.date(2006, 12, 6),
...                         datetime.date(2006, 12, 7)]))
>>> field = field.bind(context)
>>> widget = DateSetWidget(field, object(), request)
>>> print widget() # doctest: +REPORT_NDIFF
<BLANKLINE>
<input class="textType" id="field.somedates" name="field.somedates" size="30" type="text" value=""  />
<input type="button" value="..." id="field.somedates_trigger">
<script type="text/javascript">
<BLANKLINE>
  var multi_field_somedates = [new Date(2006, 11, 6), new Date(2006, 11, 7)];
  Calendar.setup({
  inputField: 'field.somedates',
  button: 'field.somedates_trigger',
  ifFormat: '%Y-%m-%d',
  onClose: getMultipleDateClosedHandler("field.somedates", multi_field_somedates),
  multiple: multi_field_somedates
});
<BLANKLINE>
</script>
<BLANKLINE>
>>> print widget.hidden() # doctest: +REPORT_NDIFF
<input class="hiddenType" id="field.somedates" name="field.somedates" type="hidden" value=""  />
<input type="button" value="..." id="field.somedates_trigger">
<script type="text/javascript">
<BLANKLINE>
  var multi_field_somedates = [new Date(2006, 11, 6), new Date(2006, 11, 7)];
  Calendar.setup({
  inputField: 'field.somedates',
  button: 'field.somedates_trigger',
  ifFormat: '%Y-%m-%d',
  onClose: getMultipleDateClosedHandler("field.somedates", multi_field_somedates),
  multiple: multi_field_somedates
});
<BLANKLINE>
</script>

Datetime Widget Demo

这个demo packe提供了一个简单的内容类,它使用 zc.datetimewidget

>>> from zope.testbrowser.testing import Browser
>>> browser = Browser()
>>> browser.handleErrors = False
>>> browser.addHeader('Authorization', 'Basic mgr:mgrpw')
>>> browser.open('http://localhost/@@contents.html')

可以通过单击 添加菜单。给它起个名字。

>>> link = browser.getLink('Datetimewidget Demo')
>>> link.click()
>>> nameCtrl = browser.getControl(name='new_value')
>>> nameCtrl.value = 'mydemo'
>>> applyCtrl = browser.getControl('Apply')
>>> applyCtrl.click()
>>> link = browser.getLink('mydemo')
>>> link.click()
>>> browser.url
'http://localhost/mydemo/@@edit.html'

我们可以填写这些值

>>> browser.getControl('Start Date').value = '2006-11-15'
>>> browser.getControl('End Date').value = '2006-11-16'
>>> browser.getControl('Start Datetime').value = '2006-11-15T07:49:31Z'
>>> browser.getControl('End Datetime').value = '2006-11-16T19:46:00Z'
>>> browser.getControl('Several dates').value = '2006-11-20 2006-11-21 2006-11-22'
>>> browser.getControl('Change').click()

它们将被保存:

>>> 'Required input is missing' in browser.contents
False
>>> '2006-11-15' in browser.contents
True
>>> '2006-11-16' in browser.contents
True
>>> '07:49' in browser.contents
True
>>> '19:46' in browser.contents
True
>>> '2006-11-20 2006-11-21 2006-11-22' in browser.contents
True

如果不填写某些字段,则会出现缺失值错误

>>> browser.getControl('Start Date').value = ''
>>> browser.getControl('Change').click()
>>> 'Required input is missing' in browser.contents
True

让我们退一步:

>>> browser.getControl('Start Date').value = '2006-11-15'
>>> browser.getControl('Change').click()
>>> 'Required input is missing' in browser.contents
False

现在,让我们尝试不填充日期集字段:

>>> browser.getControl('Several dates').value = ''
>>> browser.getControl('Change').click()
>>> 'Required input is missing' in browser.contents
True

CHANGES

0.8.0 (2016-01-12)

  • 使用^{tt2}摆脱zope.app.form依赖关系$ >;=4.0。

0.7.0 (2011-06-07)

  • 使用需要zope.login的较新zope.publisher修复测试。
  • 不使用不推荐的zope.app.securitypolicy
  • 修复测试
  • 删除测试依赖项zope.app.serverzope.app.authentication。 请改用zope.password
  • 不再使用已弃用的zope.testing.doctestunit。使用python的 改为内置doctest

0.6.4 (2009-10-20)

  • 使日历弹出窗口和拖动行为更一致 IE中的浏览器模式。

0.6.3 (2009-08-24)

  • 修复了对原始日期时间对象的处理,它们不再导致 异常,但显示为未更改。当他们再次得救时 与所有其他时区一样,它们与UTC时区一起保存。
  • datetimewidget.txtdoctest添加到long_description以显示 在PYPI主页上。
  • 修复了setup.py中的主页名。
  • 添加了要构建的覆盖率分析工具。
  • 删除了不推荐的zpkg和zcml鼻涕虫。

0.6.2 (2009-05-20)

  • 使用++resource++而不是@@/加载资源。

  • 重命名“lang”目录(ZPublisher由于 在{TT11} $中存在同名的视图。

    有关如何使用的详细信息,请参见gocept.datetimewidget zc.dateTimeWidget和zope2。

0.6.1 (2008-05-29)

  • 与0.5.2版本保持不变,但由于 在野外发现0.6.1DEV-RBFN修订版的软件包。

0.5.2 (2007-11-03)

  • 改进包数据。
  • 开发了适当的包依赖项。
  • 将功能测试合并到tests.py

0.5.1 (2006-06-15)

  • 包括许可证和版权标题。

0.5.0 (2006-05-24)

  • 初次发布。

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

推荐PyPI第三方库


热门话题
SpringMVC中的java,当我遇到旋度时,SpringMVC中出现错误   java如何从设备获取默认ip地址?   plink运行autosys批处理作业并检查其在java中的状态   java Json数组对象通过控制器[Spring Boot]传递到模型   netbeans将java命令行参数传递给插件   java Android AIDL gen文件导致警告?   java JAXB阻止JAXB与共享实体序列化   由@JsonIdentityInfo序列化的对象的java反序列化   postgresql java数组插入postgres   Java圆环碰撞检测   在Java中提取JSON键名   jdk1中的java内存泄漏。7   java Spring 3@Autowired注释问题