2016-11-28 4 views
0

私は次のエラー受け取る:今イムはちょうどCSRF_Token不足しているエラーメッセージを修正しようとするためにフラスコ - 私は私のフォームを送信しようとするたびにCSRF_TOKEN行方不明のエラー

{'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.']} 

を。しかし、私はまた私の設定が正しいことだと思う

<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 --> 

...なぜこれが起こっているので、私は理解していないよ、私のテンプレートにCSRFトークンタグを持っている...私は

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

をしないのです何か?助けてくれてありがとう!

EDIT:(!混乱のため申し訳ありませんが、初心者)ここで要求されたようで、私のconfigです

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() 
+0

form.csrfより 'form.hidden_​​tag'をお試しください。 http://stackoverflow.com/a/21501593 – Erik

+0

設定オブジェクトを表示できますか?それをあなたのアプリにどのように渡しますか? – ettanany

+0

@エリックはそれを試しましたが、hidden_​​tagとcsrf_tokenは私が信じているものと同じ/同様のことをするので、何も変わっていませんでした。 –

答えて

0

私はあなたの設定ビットをクリーンアップする必要があると思う、あなたの輸入以下のすべてを置き換えるために試してみて、

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のエラーがアップ来ていた理由である、設定されていない可能性のような外観を設定する:これでdef application():行の上。

+0

私はこの問題を修正しましたが、問題はまだ発生しているようです。しかし、私は、フォームが記入されて提出されたときにトークンが失われるだけです。フォームが空のままで提出された場合、エラーは発生しません。なぜこれが起こっているのか分かりませんが、私のコードを整理する手助けをしてくれてありがとう! –

関連する問題