Yar*_*lav 3 python flask python-3.x wtforms flask-wtforms
我正在创建一个小型企业门户网站。将会有一个计算机数据库,其中包含有关公司中所有计算机的信息。我正在创建一个 WTForm 用于编辑计算机的属性。我有一个页面,其中包含包含计算机属性的表格。每行都有特殊的按钮。当用户按下其中一个时,我想显示一个带有从数据库获取默认值的表单的页面。当我在视图函数中编辑默认值时,出现错误:
\n\nThe CSRF token is missing.\nRun Code Online (Sandbox Code Playgroud)\n\n我的查看功能:
\n\ndef edit_computer(computer_id):\n if admin_can() or sysadmin_can():\n computer = models.Computer.query.filter_by(id=computer_id).one()\n user = models.User.query.filter_by(id=computer.user_id).one()\n email = user.email\n\n form = forms.EditComputerForm()\n form.email.default = user.email\n form.type_.default=computer.type_\n form.model.default = computer.model\n form.cpu.default = computer.cpu\n form.ram.default = computer.ram\n form.rom.default = computer.rom\n form.os.default = computer.os\n form.supplements.default = computer.supplements\n form.process()\n\n if form.validate_on_submit():\n ...\nRun Code Online (Sandbox Code Playgroud)\n\n当我不设置默认值时(删除此 \xe2\x86\x93),代码工作正常
\n\nform.email.default = user.email\nform.type_.default=computer.type_\nform.model.default = computer.model\nform.cpu.default = computer.cpu\nform.ram.default = computer.ram\nform.rom.default = computer.rom\nform.os.default = computer.os\nform.supplements.default = computer.supplements\nform.process()\nRun Code Online (Sandbox Code Playgroud)\n\n形式:
\n\nclass EditComputerForm(FlaskForm): \n email = EmailField("Owner\'s E-Mail",\n validators=[DataRequired(), Email()])\n type_ = SelectField(\'type\',\n choices=[(\'Notebook\', \'Notebook\'), (\'PC\', \'PC\')])\n model = StringField(\'Model\')\n cpu = StringField(\'CPU\')\n ram = StringField(\'RAM\')\n rom = StringField(\'ROM\')\n os = StringField(\'OS\')\n supplements = TextAreaField(\'Supplements\')\n submit = SubmitField(\'Edit\')\nRun Code Online (Sandbox Code Playgroud)\n\nHTML:
\n\n{% extends \'base.html\' %}\n{% import \'bootstrap/wtf.html\' as wtf %}\n\n{% block app_content %}\n<h3>Edit computer\'s properties {{ add_title }}</h3>\n<hr>\n{{ wtf.quick_form(form, button_map={\'submit\': \'primary\'}) }}\n{% endblock %}\n\n{% block app_windows %}{% endblock %}\nRun Code Online (Sandbox Code Playgroud)\n\n如何修复这个错误?WTForm 现在无法运行。
\n它form.process()破坏了 csrf 进程。
要动态设置表单值,我建议您使用 data 属性,而不是默认属性。那你就不用打电话了form.process()。
form.email.data= user.email
form.type_.data=computer.type_
form.model.data= computer.model
form.cpu.data= computer.cpu
form.ram.data= computer.ram
form.rom.data= computer.rom
form.os.data= computer.os
form.supplements.data= computer.supplements
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
722 次 |
| 最近记录: |