在python中保证保持类中属性的顺序吗?这是如何保证的?在手册中指定的位置?
这将声明性地将字段定义为类属性:
class MyForm(Form):
first_name = TextField(u'First Name', validators=[validators.required()])
last_name = TextField(u'Last Name', validators=[validators.optional()])
...
def get(self):
form = MyForm(self.request.arguments)
form=form
self.render('forms.html', form=form)
Run Code Online (Sandbox Code Playgroud)
即使我有n个项目,名字将始终是第一个项目,最后一个名称是第二个名称?
我正在努力了解这是如何完成的,并且文档似乎没有多大帮助。
我需要生成一个表,行大小是可变的,但不是动态的(我知道在生成页面之前需要多少行)。
为了简单起见,让我们想象一个页面,您用一个整数对 n 个考试进行评分。
我试过这个:
表格。
class InputInteger(Form):
grade = IntegerField('Grade')
Run Code Online (Sandbox Code Playgroud)
风景
@decorator..
def grade():
form = InputInteger()
names = student_list
return render_template("grade.html", form=form, names=names)
Run Code Online (Sandbox Code Playgroud)
模板
<table>
<tr>
<th>Name</th>
<th>Grade</th>
</tr>
{% for name in names %}
<tr>
<td>
{{name}}
</td>
<td>
{{form.grade}}
</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
但是我如何读回输入的值呢?我如何区分谁也属于谁的年级?
我很困惑,我读过有关 FieldList(FormField(IntegerField)) 的内容,但这不只是一个带有整数列表的字段吗?表格小部件怎么样,我需要它吗?
请帮忙。
这不是一个非常具体的问题,所以提前抱歉.
我有一个名为Crews的文件夹,它包含json文件.
我正在使用WTForms创建一个下拉列表,我希望列表中填充该文件夹中的json文件的名称,但我不知道如何去做.
(我正在创建一个可视化所选json数据的Web应用程序,因此表单将包含一个函数,该函数返回所选的json数据,由d3.js代码调用)
尝试更新具有以下关系的记录时,我遇到了一些麻烦:
events_mentor_table = db.Table('events_mentors', db.Model.metadata,
db.Column('event_id', db.Integer, ForeignKey('event.id')),
db.Column('mentor_id', db.Integer, ForeignKey('mentor.id'))
)
class Mentor(db.Model):
__tablename__ = 'mentor'
id = db.Column(db.Integer(), primary_key=True)
first_name = db.Column(db.String())
last_name = db.Column(db.String())
job_title = db.Column(db.String())
company_url = db.Column(db.String())
twitter_url = db.Column(db.String())
linkedin_url = db.Column(db.String())
bio = db.Column(db.Text())
def __str__(self):
return '%s %s (%s)' % (self.first_name, self.last_name, self.job_title)
class Event(db.Model):
__tablename__ = 'event'
id = db.Column(db.Integer(), primary_key=True)
date = db.Column(db.Date())
start_time = db.Column(db.Time())
end_time = db.Column(db.Time())
title = db.Column(db.String())
address = db.Column(db.String())
description = db.Column(db.Text())
mentors …Run Code Online (Sandbox Code Playgroud) 我想要做的是检查表单对象具有哪种类型的表单验证器,以便我可以基于这些属性呈现字段.例如,如果表单具有最大长度验证,则将max-length属性添加到html表单.
我在想它的工作方式是这样的:
zip_code = TextField('Zip Code', [validators.Length(min=5, max=11)])
Run Code Online (Sandbox Code Playgroud)
将会像这样进入Jinja2宏:
{% if field.valdator "has max length" %}
{% set class = class + ' maxlength="11" ' %}
{% endif %}
{{ field(class=class, **kwargs) }}
Run Code Online (Sandbox Code Playgroud) 我有以下 Flask-WTF 表格:
class PersonForm(FlaskForm):
name = StringField('Name', validators=[DataRequired()])
age = IntegerField('Age', validators=[NumberRange(min=0)], render_kw={'type': 'number'})
educated = BooleanField('Educated', render_kw={'type': 'checkbox'})
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过将值传递到表单中来预先填充表单,如下所示:
form = PersonForm(name='Johnny', age=25, educated=True)
Run Code Online (Sandbox Code Playgroud)
我注意到有一种更好的方法可以通过将一个对象注入到表单中来做到这一点(参考这里和这里)。我已经尝试了以下方法,但是,它不起作用。我哪里出错了(对象应该是字典以外的东西)?
person = {'name': 'Johnny', 'age': 25, 'educated'=True}
form = PersonForm(obj=person)
Run Code Online (Sandbox Code Playgroud)
请注意,这些预先填充的值来自数据库。有些值已定义,有些则未定义。例如,另一个“人”可能看起来像{'name': 'Jessica', 'educated': True}(在这种情况下,年龄字段将为空)。
I have some Flask-SQLAlchemy models and Flask-WTF forms generated with wtforms_alchemy to represent them. I implemented a method on each model to update its attributes from a form's data. For each new model and field I have to update these methods, which is annoying. Is there a way to make this more automatic, or a a feature in the libraries I'm using that I'm missing?
def edit_car(car_id):
form = CarForm(request.form)
if form.is_valid():
car = Car.query.get_or_404(car_id)
car.from_form(form) # Update car fields …Run Code Online (Sandbox Code Playgroud) 代码是不言自明的 - 我想将变量传递给FlaskForm子类以供进一步使用。
from flask import Flask, render_template_string
from flask_wtf import FlaskForm
from wtforms import StringField
from flask_wtf.csrf import CSRFProtect
app = Flask(__name__)
spam = 'bar'
app.secret_key = 'secret'
csrf = CSRFProtect(app)
@app.route('/')
def index():
eggs = spam
form = FooForm(eggs)
return render_template_string(
'''
{{ form.bar_field.label }} {{ form.bar_field }}
''',form = form)
class FooForm(FlaskForm):
def __init__(self, bar):
super(FooForm, self).__init__()
self.bar = bar
bar_field = StringField("Label's last word is 'bar': {0}".format(self.bar))
if __name__ == '__main__':
app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)
我得到的是
line …Run Code Online (Sandbox Code Playgroud) 我无法在其他字段中上传图像。虽然其他字段的数据存在,但图像不存在,因此表单没有被验证。
这里是后端,具体看图片文件字段,标有#IMAGE
from flask import Blueprint, request, render_template, redirect, flash
import os
from flask import current_app as app
from src.models.products.product import Product
from flask_wtf import FlaskForm
from wtforms import StringField, BooleanField, FileField, SubmitField
from wtforms.validators import InputRequired
from flask_wtf.file import FileField, FileRequired
from werkzeug.utils import secure_filename
dash_board_blueprint = Blueprint('dashboard', __name__, template_folder='templates')
class UploadForm(FlaskForm):
name = StringField('Name', validators=[InputRequired()])
category = StringField('Category', validators=[InputRequired()])
sub_category = StringField('Sub Category', validators=[InputRequired()])
size = StringField('Size', validators=[InputRequired()])
variant = StringField('Variant', validators=[InputRequired()])
price = StringField('Price', validators=[InputRequired()])
enable_discount = …Run Code Online (Sandbox Code Playgroud) 我无法弄清楚为什么我的表单无法验证。我已经确保将 CSRF 字段插入到 HTML 中form.hidden_tag
这是我的注册表单的代码:
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField, BooleanField
from wtforms.validators import DataRequired, Length, Email, EqualTo
class RegistrationForm(FlaskForm):
username = StringField('Username', validators=[DataRequired(), Length(min=2, max=20)])
email = StringField('Email', validators=[DataRequired(), Email()])
password = PasswordField('Password', validators=[DataRequired()])
confirm_password = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo(password)])
submit = SubmitField('Register')
Run Code Online (Sandbox Code Playgroud)
这是我正在检查表单是否经过验证的函数。它确实提交,因为程序将“已提交”打印到我的终端中
@app.route('/register', methods=['GET', 'POST'])
def register():
form = RegistrationForm()
if form.is_submitted():
print("submitted")
if form.validate_on_submit():
flash(f'Account created for {form.username.data}!', 'success')
return redirect(url_for('home'))
print(forms.errors)
return render_template('register.html', title='Register', form=form)
Run Code Online (Sandbox Code Playgroud)
使用forms.errors,我收到以下错误消息: …