Exemple #1
0
class UserModelView(ModelView):
    can_view_details = True
    can_delete = False
    column_exclude_list = ('password', )
    column_default_sort = 'id'
    column_filters = (
        'name',
        'username',
    )

    create_template = 'user/create.html'
    edit_template = 'user/edit.html'

    form_create_rules = [
        rules.FieldSet(('username', ), 'Account'),
        # Header and four fields. Email field will go above phone field.
        rules.FieldSet(('first_name', 'last_name', 'email', 'phone'),
                       'Personal'),
        # Separate header and few fields
        rules.Header('Location'),
        rules.Field('city'),
        # String is resolved to form field, so there's no need to explicitly use `rules.Field`
        'country',
        # Show macro that's included in the templates
        rules.Container('rule_demo.wrap', rules.Field('notes'))
    ]
    form_edit_rules = form_create_rules
def test_rule_container():
    app, db, admin = setup()

    Model1, _ = create_models(db)
    db.create_all()

    view = CustomModelView(Model1,
                           db.session,
                           create_template='macro.html',
                           form_create_rules=(rules.Container(
                               'wrap',
                               rules.Macro('test_lib.another_test')), ))
    admin.add_view(view)

    client = app.test_client()

    rv = client.get('/admin/model1/new/')
    eq_(rv.status_code, 200)

    data = rv.data.decode('utf-8')
    pos1 = data.find('<wrapper>')
    pos2 = data.find('another_test')
    pos3 = data.find('</wrapper>')
    ok_(pos1 != -1)
    ok_(pos2 != -1)
    ok_(pos3 != -1)
    ok_(pos1 < pos2 < pos3)
Exemple #3
0
def test_rule_container():
    app, db, admin = setup()

    Model1, _ = create_models(db)
    db.create_all()

    view = CustomModelView(
        Model1,
        db.session,
        create_template="macro.html",
        form_create_rules=(rules.Container(
            "wrap", rules.Macro("test_lib.another_test")), ),
    )
    admin.add_view(view)

    client = app.test_client()

    rv = client.get("/admin/model1/new/")
    eq_(rv.status_code, 200)

    data = rv.data.decode("utf-8")
    pos1 = data.find("<wrapper>")
    pos2 = data.find("another_test")
    pos3 = data.find("</wrapper>")
    ok_(pos1 != -1)
    ok_(pos2 != -1)
    ok_(pos3 != -1)
    ok_(pos1 < pos2 < pos3)
Exemple #4
0
class UserView(sqla.ModelView):
    """
    This class demonstrates the use of 'rules' for controlling the rendering of forms.
    """
    form_create_rules = [
        # Header and four fields. Email field will go above phone field.
        rules.FieldSet(('name', 'email', 'phone'), u'个人信息'),
        # Separate header and few fields
        rules.Header(u'备注'),
        rules.Field('user_story'),
        # String is resolved to form field, so there's no need to explicitly use `rules.Field`
        #        'country',
        # Show macro from Flask-Admin lib.html (it is included with 'lib' prefix)
        rules.Container('rule_demo.wrap', rules.Field('notes'))
    ]

    # Use same rule set for edit page
    form_edit_rules = form_create_rules

    create_template = 'rule_create.html'
    edit_template = 'rule_edit.html'

    column_exclude_list = ('password', 'notes')

    #    can_create = False

    def is_accessible(self):
        return flask_login.current_user.is_authenticated
Exemple #5
0
class UserView1(sqla.ModelView):
    def _list_thumbnail(view, context, model, name):
        if not model.path:
            return ''

        return Markup('<img src="%s">' % url_for('static',
                                                 filename='files/'+form.thumbgen_filename(model.path)))

    column_formatters = {
        'path':_list_thumbnail

    }

    # Alternative way to contribute field is to override it completely.
    # In this case, Flask-Admin won't attempt to merge various parameters for the field.
    form_extra_fields = {
        'path': form.ImageUploadField('Image',
                                      base_path=file_path,
                                      thumbnail_size=(100, 100, True),
                                      url_relative_path='files/')
    }

    """
    This class demonstrates the use of 'rules' for controlling the rendering of forms.
    """
    form_create_rules = [
        # Header and four fields. Email field will go above phone field.
        rules.FieldSet(('first_name', 'last_name', 'email', 'phone','path'), 'Personal'),
        # Separate header and few fields
        rules.Header('Location'),
        rules.Field('city'),
        # String is resolved to form field, so there's no need to explicitly use `rules.Field`
        'country',
        # Show macro that's included in the templates
        rules.Container('rule_demo.wrap', rules.Field('notes'))
        #rules.FieldSet('path')
    ]

    # Use same rule set for edit page
    form_edit_rules = form_create_rules

    create_template = 'create_user.html'
    edit_template = 'edit_user.html'
Exemple #6
0
class UserView(sqla.ModelView):
    """
    This class demonstrates the use of 'rules' for controlling the rendering of forms.
    """
    form_create_rules = [
        # Header and four fields. Email field will go above phone field.
        rules.FieldSet(('first_name', 'last_name', 'email', 'phone'), 'Personal'),
        # Separate header and few fields
        rules.Header('Location'),
        rules.Field('city'),
        # String is resolved to form field, so there's no need to explicitly use `rules.Field`
        'country',
        # Show macro from Flask-Admin lib.html (it is included with 'lib' prefix)
        rules.Container('rule_demo.wrap', rules.Field('notes'))
    ]

    # Use same rule set for edit page
    form_edit_rules = form_create_rules

    create_template = 'rule_create.html'
    edit_template = 'rule_edit.html'
Exemple #7
0
class UserView(sqla.ModelView):
    """
    Esta clase demuestra el uso de 'reglas' para controlar la representación de formularios.
    """
    form_create_rules = [
        # Header y los 4 campos..
        rules.FieldSet(('first_name', 'last_name', 'email', 'phone'),
                       'Personal'),
        # Separando headr y campos
        rules.Header('Location'),
        rules.Field('city'),
        'country',
        # Mostrar macro de Flask-Admin lib.html (se incluye con el prefijo 'lib')
        rules.Container('rule_demo.wrap', rules.Field('notes'))
    ]

    # Use same rule set for edit page
    form_edit_rules = form_create_rules

    create_template = 'rule_create.html'
    edit_template = 'rule_edit.html'
Exemple #8
0
class UserView(sqla.ModelView):
    """
    This class demonstrates the use of 'rules' for controlling the rendering of forms.
    """

    form_create_rules = [
        # Header and four fields. Email field will go above phone field.
        rules.FieldSet(("first_name", "last_name", "email", "phone"),
                       "Personal"),
        # Separate header and few fields
        rules.Header("Location"),
        rules.Field("city"),
        # String is resolved to form field, so there's no need to explicitly use `rules.Field`
        "country",
        # Show macro from Flask-Admin lib.html (it is included with 'lib' prefix)
        rules.Container("rule_demo.wrap", rules.Field("notes")),
    ]

    # Use same rule set for edit page
    form_edit_rules = form_create_rules

    create_template = "rule_create.html"
    edit_template = "rule_edit.html"
Exemple #9
0
class UserView(MyModelView):
    #id, username, confirmed, email, __password_hash, role_id, location, about_me, member_since, last_seen
    can_view_details = True  # show a modal dialog with records details

    form_widget_args = {'id': {'readonly': True}}
    column_list = [
        'id', 'role_id', 'username', 'confirmed', 'email', 'location',
        'about_me', 'member_since', 'last_seen'
    ]

    column_auto_select_related = True

    column_searchable_list = [
        'id', 'role_id', 'username', 'confirmed', 'email', 'location',
        'about_me', 'member_since', 'last_seen'
    ]

    column_editable_list = [
        'username',
        'confirmed',
        'email',
        'location',
        'about_me',
        'member_since',
    ]

    column_default_sort = [('username', False),
                           ('last_seen', False)]  # sort on multiple columns

    # custom filter: each filter in the list is a filter operation (equals, not equals, etc)

    # filters with the same name will appear as operations under the same filter
    column_filters = [
        'username',
        FilterEqual(column=User.username, name='User Name'),
        #FilterLastNameBrown(column=User.last_name, name='Last Name',
        #                    options=(('1', 'Yes'), ('0', 'No'))),
        'member_since',
        'email',
        'confirmed',
        'last_seen',
        'location',
    ]
    #    column_formatters = {'phone_number': phone_number_formatter}

    # setup edit forms so that only posts created by this user can be selected as 'featured'
    form_create_rules = [
        # Header and four fields. Email field will go above phone field.
        rules.FieldSet(('username', 'email', 'role', 'confirmed',
                        'member_since', 'last_seen'), 'Personal'),
        # Separate header and few fields
        rules.Header('Location'),
        rules.Field('location'),
        # String is resolved to form field, so there's no need to explicitly use `rules.Field`
        # Show macro that's included in the templates
        rules.Container('rule_demo.wrap', rules.Field('about_me'))
    ]

    form_edit_rules = form_create_rules

    create_template = 'admin/create_user.html'
    edit_template = 'admin/edit_user.html'

    def edit_form(self, obj):
        return self._filtered_roles(super(UserView, self).edit_form(obj))

    def _filtered_roles(self, form):
        form.role.query_factory = lambda: Role.query.filter(
            Role.permission == form._obj.id).all()
        return form
Exemple #10
0
class FileView(MyModelView):
    column_list = ('title', 'file_path', 'file_bytes')
    column_searchable_list = ('title', 'file_path')
    column_default_sort = 'file_path'
    column_labels = {'file_bytes': 'Size'}
    column_formatters = {
        'file_bytes':
        lambda v, c, m, n: '-' if m.file_bytes is None else Markup(
            '<nobr>%s</nobr>' % humanize.naturalsize(m.file_bytes)),
    }

    class SizeRule(rules.BaseRule):
        def __call__(self, form, form_opts=None, field_args={}):
            if form._obj.file_bytes:
                return humanize.naturalsize(form._obj.file_bytes)
            return '-'

    class UrlRule(rules.BaseRule):
        def __call__(self, form, form_opts=None, field_args={}):
            url = url_for('docs', path=form.file_path.data)
            return Markup('<a href="%s" target="_blank">%s</a>' % (url, url))

    form_columns = (
        'title',
        'description',
        'file_path',
        'file_mime',
        'file_bytes',
    )
    form_widget_args = {
        'file_mime': {
            'readonly': True
        },
        'file_path': {
            'readonly': True
        },
        'file_bytes': {
            'readonly': True
        },
    }

    form_edit_rules = [
        'title',
        'description',
        'file_path',
        'file_mime',
        rules.Container('rules.staticfield', SizeRule(), label='Size'),
        rules.Container('rules.staticfield', UrlRule(), label='URL'),
    ]

    form_create_rules = ['title', 'description', 'upload']

    def get_create_form(self):
        # allow user to upload a file when creating form
        form = super(FileView, self).get_create_form()
        form.upload = fields.FileField('Upload a file', [data_required()])
        return form

    def on_model_change(self, form, model, is_create):
        if is_create:
            file_data = request.files.get(form.upload.name)
            model.from_upload(file_data)