Подтвердить что ты не робот

WTForms поддерживает входной атрибут readonly?

Здесь они говорят, что это не поддерживается из коробки.

Знаете ли вы, как использовать поля формы ввода HTML, используя атрибут 'readonly' с WTForms?

4b9b3361

Ответ 1

Я предполагаю, что вы говорите об атрибуте <input readonly> в HTML/XHTML, что не связано с тем, с чем связана ваша дискуссия. (связанный поток относится к проблеме более низкого уровня с тем, как игнорировать переданный ввод формы)

Способ установки атрибута readonly (и даже любого атрибута в поле) является ключевым словом-arg в вашем шаблоне. Если вы используете Jinja, это выглядит как (html5):

{{ form.myfield(readonly=true) }}

И для XHTML или версий WTForms старше 0.6.3:

{{ form.myfield(readonly="readonly") }}

Просто обратите внимание, что атрибут 'readonly' является лишь подсказкой для браузера и не влияет на то, что пользователь представляет. Это значит, что злоумышленник (или кто-то, пользующийся браузером с пользовательским JS a la greasemonkey или JS-консолью или DOM-деревом) может генерировать запрос POST, изменяющий значение поля, независимо от того, установлен ли атрибут readonly на тег ввода.

По этой причине атрибут readonly полезен только как опция для изменения пользовательского опыта (например, отключение поля на основе какого-либо события/действия с использованием JS), а ввод, поступающий из поля "только для чтения", больше не является доверяющий, чем любой другой ввод формы.

Ответ 2

Решение использует render_kw в объявлении поля формы.

my_field = fields.StringField('Label', render_kw={'readonly': True})

Ответ 3

https://wtforms-components.readthedocs.org/en/latest/#

from wtforms import Form, DateField, TextField
from wtforms_components import TimeField, read_only

class EventForm(Form):
    name = TextField('Name')
    start_date = DateField('Start date')
    start_time = TimeField('Start time')

    def __init__(self, *args, **kwargs):
        super(EventForm, self).__init__(*args, **kwargs)
        read_only(self.name)