Flask - CSRF_TOKEN 缺少错误

Flask - CSRF_TOKEN missing error

每当我尝试提交我的表单时,我都会收到以下错误:

{'department': [u'Not a valid choice'], 'email': [u'This field is required.'], 'csrf_token': ['CSRF token missing'], 'name': [u'This field is required.'], 'address': [u'This field is required.']}

目前我只是在尝试修复 CSRF_Token 丢失的错误消息。但是我的模板中有 csrf 令牌标签,所以我不明白为什么会这样...

<form enctype="multipart/form-data" action="/index" method="post" role="form"> <!-- how the data is obtained from the form (POST method) -->
    {{ form.csrf_token }}
    <div class="form-group">
      <label style="margin-top: 10px;" for="name">Name:</label>
      {{ form.name(class_="form-control") }} <!-- this creates the name form field -->
      <br>
      <label for="address">Address:</label>
      {{ form.address(class_="form-control", rows='5', cols='40') }} <!-- this creates the adress form field -->
      <br>
      <label for="email">E-mail Address:</label>
      {{ form.email(class_="form-control") }}
      <br>
      <label for="telephone">Phone Number: </label>
      {{ form.telephone(class_="form-control") }}
      <br>
      <label for="file_upload">Upload CV: </label>
      {{ form.file_upload(class_="form-control") }}
      <br>
      <label for="Department">Department:</label>
      {{ form.department(class_="form-control")}}
      <br>
      </select>
    </div>
<button name="submit" type="submit" class="btn btn-primary">Submit</button> </form> <!-- submit button -->

我也认为我的配置是正确的...

WTF_CSRF_ENABLED = True
SECRET_KEY = 'this-is-a-secret-key'

我错过了什么吗?感谢您的帮助!

编辑: 这里是我的配置(对不起,初学者!)

from flask import Flask, render_template, session, flash, request, redirect,       url_for
from flask_wtf import Form
from flask_sqlalchemy import SQLAlchemy
from werkzeug.utils import secure_filename
from wtforms import TextField, TextAreaField, validators, StringField,    SubmitField, BooleanField, RadioField, SelectField, FileField, IntegerField
from .forms import ApplicationForm, DataRequired
import os
import re
import sqlite3
from flask_wtf.csrf import CsrfProtect


SECRET_KEY = 'you-will-never-guess'


#configuration
DEBUG = True
app = Flask('Application')
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///applicants.sqlite3'

app.config.from_object(__name__)
from app import views

CsrfProtect(app)
WTF_CSRF_ENABLED = True

DEBUG = True

UPLOAD_FOLDER = '/Uploads'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
FILE_TYPES = set(['txt', 'doc', 'docx', 'odt', 'pdf', 'rtf', 'text', 'wks',   'wps', 'wpd'])

def application():
    form = ApplicationForm(request.form)
    return render_template('index.html','home.html', form=form)

db = SQLAlchemy(app)
class Applicants(db.Model):
    id = db.Column('applicant_id', db.Integer, primary_key = True)
    name = db.Column(db.String(100))
    address = db.Column(db.String(200))
    telephone = db.Column(db.String(15))
    email = db.Column(db.String(100))
    department = db.Column(db.String(30))
    file_upload = db.Column(db.Boolean)

def __init__(self, name, address, telephone, email, department, file_upload):
    self.name = name
    self.address = address
    self.telephone = telephone
    self.email = email
    self.department = department
    self.file_upload = file_upload

db.create_all() 

if __name__ == "Application":
    app.run()

我认为您需要稍微清理一下您的配置,尝试将您的导入下方和 def application(): 行上方的所有内容替换为:

app = Flask(__name__)
CsrfProtect(app)
app.config.update(
    DEBUG = True,
    WTF_CSRF_ENABLED = True,
    SECRET_KEY = 'you-will-never-guess',
    UPLOAD_FOLDER = '/Uploads',
    SQLALCHEMY_DATABASE_URI = 'sqlite:///applicants.sqlite3',
    FILE_TYPES = ['txt', 'doc', 'docx', 'odt', 'pdf', 'rtf', 'text', 'wks', 'wps', 'wpd']
)
from app import views

DEBUGSECRET_KEY 设置看起来可能没有正确设置,这就是出现 CSRF 错误的原因。