コード例 #1
0
ファイル: apps.py プロジェクト: pombredanne/djpcms
class ModelItemListForm(ForModelForm):
    max_display = forms.IntegerField(initial=10,
                                     widget=html.TextInput(cn='span1'))
    text_search = forms.CharField(required=False)
    filter = forms.CharField(required=False)
    exclude = forms.CharField(required=False)
    order_by = forms.ChoiceField(required=False,
                                 widget=html.Select(cn='model-fields'),
                                 choices=FieldChoices())
    descending = forms.BooleanField(initial=False)
    headers = forms.ChoiceField(required=False,
                                widget=html.Select(cn='model-fields'),
                                choices=FieldChoices(multiple=True))
    table_footer = forms.BooleanField(initial=False, label='footer')
    display_if_empty = forms.BooleanField(initial=False)
コード例 #2
0
ファイル: fields.py プロジェクト: pombredanne/djpcms
class DateField(Field):
    widget = html.TextInput(cn='dateinput')
    validation_error = '{1} is not a valid date.'

    def _clean(self, value, bfield):
        if not isinstance(value, date):
            try:
                value = dateparser(value)
            except:
                raise ValidationError(
                    self.validation_error.format(bfield, value))
        return self.todate(value)

    def todate(self, value):
        if hasattr(value, 'date'):
            value = value.date()
        return value
コード例 #3
0
ファイル: fields.py プロジェクト: pombredanne/djpcms
    def handle_params(self, choices=None, **kwargs):
        '''Choices is an iterable or a callable which takes the
form as only argument'''
        if not isinstance(choices, ChoiceFieldOptions):
            if not hasattr(choices,'__call__') and\
               not hasattr(choices,'__iter__'):
                raise TypeError('choices must be an instance of\
 ChoiceFieldOptions, iterable or a callable. Got "{0}" instead'.format(
                    choices))
            choices = ChoiceFieldOptions(query=choices)
        self.choices = choices
        if choices.autocomplete:
            if not self.widget.attrs.get('type') == 'text':
                self.widget = html.TextInput()
            self.widget.addClass('autocomplete')
        elif choices.multiple:
            self.widget_attrs['multiple'] = 'multiple'
        self._raise_error(kwargs)
コード例 #4
0
ファイル: forms.py プロジェクト: pombredanne/djpcms
def search_form(name='SearchForm',
                placeholder='search',
                input_name=None,
                submit=None,
                cn=None,
                choices=None,
                label='search text',
                deafult_style=uni.nolabel,
                on_submit=None,
                required=False,
                **kwargs):
    '''Create a new :class:`djpcms.forms.HtmlForm` for searching.

:parameter name: name of the :class:`Form`
:parameter placeholder: text for the ``placeholder`` input attribute.
:parameter submit: submit text. If not provided, the form will submit on enter
    key-stroke.
:parameter cn: additional class names for the input element in the form.
'''
    submit = submit or ()
    input_name = input_name or forms.SEARCH_STRING
    widget = html.TextInput(placeholder=placeholder, cn=cn)
    if not submit:
        widget.addData('options', {'submit': True})
        layout = uni.FormLayout(default_style=deafult_style)
    else:
        submit = ((submit, 'search'), )
        layout = uni.FormLayout(uni.Inlineset(input_name, uni.SUBMITS),
                                default_style=deafult_style)
    if choices:
        field = forms.ChoiceField(attrname=input_name,
                                  label=label,
                                  required=required,
                                  choices=choices,
                                  widget=widget)
    else:
        field = forms.CharField(attrname=input_name,
                                label=label,
                                required=required,
                                widget=widget)
    form_cls = forms.MakeForm(name, (field, ), on_submit=on_submit)

    return forms.HtmlForm(form_cls, inputs=submit, layout=layout, **kwargs)
コード例 #5
0
class LoginForm(forms.Form):
    '''The Standard login form
    '''
    username = forms.CharField(max_length=30,
                    widget=html.TextInput(cn='autocomplete-off'))
    password = forms.CharField(max_length=60, widget=html.PasswordInput())

    def clean(self):
        '''process login'''
        data = self.cleaned_data
        try:
            user = self.request.view.permissions.authenticate_and_login(
                                self.request.environ, **data)
            if user:
                data['user'] = user
                return
        except ValueError as e:
            raise forms.ValidationError(str(e))

        raise ValueError('No authentication backend available.')

    def on_submit(self, commit):
        return self.cleaned_data['user']
コード例 #6
0
ファイル: fields.py プロジェクト: pombredanne/djpcms
class IntegerField(Field):
    default = None
    widget = html.TextInput(cn='numeric')
    convert_error = '"{0}" is not a valid integer.'

    def handle_params(self, validator=None, **kwargs):
        self.validator = validator
        self._raise_error(kwargs)

    def clean(self, value, bfield):
        try:
            value = value.replace(',', '')
        except AttributeError:
            pass
        return super(IntegerField, self).clean(value, bfield)

    def _clean(self, value, bfield):
        try:
            value = int(value)
            if self.validator:
                return self.validator(value)
            return value
        except:
            raise ValidationError(self.convert_error.format(value))
コード例 #7
0
ファイル: fields.py プロジェクト: pombredanne/djpcms
class CharField(Field):
    '''\
A text :class:`Field` which introduces three
optional parameter (attribute):

.. attribute:: max_length

    If provided, the text length will be validated accordingly.

    Default ``None``.

.. attribute:: char_transform

    One of ``None``, ``u`` for upper and ``l`` for lower. If provided
    converts text to upper or lower.

    Default ``None``.

.. attribute:: toslug

    If provided it will be used to create a slug text which can be used
    as URI without the need to escape.
    For example, if ``toslug`` is set to "_", than::

        bla foo; bee

    becomes::

        bla_foo_bee

    Default ``None``
'''
    default = ''
    widget = html.TextInput()

    def handle_params(self,
                      max_length=30,
                      char_transform=None,
                      toslug=None,
                      **kwargs):
        if not max_length:
            raise ValueError('max_length must be provided for {0}'\
                             .format(self.__class__.__name__))
        self.max_length = int(max_length)
        if self.max_length <= 0:
            raise ValueError('max_length must be positive')
        self.char_transform = char_transform
        if toslug:
            if toslug == True:
                toslug = '-'
            toslug = slugify(toslug)
        self.toslug = toslug
        self._raise_error(kwargs)

    def _clean(self, value, bfield):
        try:
            value = to_string(value)
        except:
            raise ValidationError()
        if self.toslug:
            value = slugify(value, self.toslug)
        if self.char_transform:
            if self.char_transform == 'u':
                value = value.upper()
            else:
                value = value.lower()
        if self.required and not value:
            raise ValidationError(
                self.validation_error.format(bfield.name, value))
        return value