Flask教程笔记-CSRF token保护验证

这篇博客详细介绍了Flask中实现CSRF token保护验证的过程,包括User Form验证模块代码、HTML模板index.html的编写、控制器视图信息及CSRF验证的注意事项。在使用Flask-WTF进行表单验证时,若导入Form错误,可能会导致'Bad Request/CSRF token missing or incorrect'的错误,需注意导入路径的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Flask教程笔记-CSRF token保护验证

#! coding=utf8
from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy
from flask_bootstrap import Bootstrap
from flask_wtf.csrf import CsrfProtect
#导入CsrfProtect的模块
app = Flask(__name__)
app.config.from_object('config')
db = SQLAlchemy(app)
csrf = CsrfProtect(app)#app项目加载CsrfProtect
bootstrap = Bootstrap(app)
from app.views import IndexView
User Form验证模块代码
# -*- coding:utf-8 -*-
__author__ = 'pyphrb'
from flask_wtf import Form
from wtforms import StringField,SubmitField
from wtforms.validators import DataRequired

class MyForm(Form):
    name = StringField('name', validators=[DataRequired(message=u"姓名不能为空")])
    submit = SubmitField(u'提交')
html代码index.html
<form method="POST" action="/submit">
    {{ form.csrf_token }}
    #判断name的表单验证是否有问题,有问题直接显示error信息
    {% if form.errors.name %}
        {{ form.name.label }} {{ form.name(size=20) }}
        {% for error in form.errors.name %}
            <span>{{ error }}</span>
        {% endfor %}
    {% else %}
        {{ form.name.label }} {{ form.name(size=20) }}
    {% endif %}
    {% if form.errors.csrf_token  %}
        {% for error in form.errors.csrf_token %}
            <span>{{ error}}</span>
        {% endfor %}
    {% endif %}
    #判断csrf是否有错误
    {{ form.submit }}
</form>
controller的view信息
__author__ = 'pyphrb'
from app import app
from flask import render_template, url_for, request, make_response
from flask import session, redirect, escape
from app.form import User
from app import csrf


@app.route('/', methods=['GET','POST'])
def index():
    userForm = User.MyForm(request.form)
    return render_template('Index/index.html', form=userForm)

@app.route('/submit', methods=['POST'])
def submit():
    userForm = User.MyForm()
    if request.method == 'POST' and userForm.validate():
    #判断访问是否是post并且通过验证表单,进行一下操作
        print 'xxx'
        return "xxxx"
    else:
    #验证失败,返回模板,提示错误信息
        return render_template('Index/index.html', form=userForm)
csrf验证注意事项

当你定义你的表单的时候,如果犯了 这个错误_ : 从 wtforms 中导入 Form 而不是从 flask.ext.wtf 中导入,CSRF 保护的大部分功能都能工作(除了 form.validate_on_submit()),但是 CSRF 保护将会发生异常。在提交表单的时候,你将会得到 Bad Request/CSRF token missing or incorrect 错误。这个错误的出现就是因为你的导入错误,而不是你的配置问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值