Flask入门

您所在的位置:网站首页 flask登陆验证 Flask入门

Flask入门

2023-11-24 20:49| 来源: 网络整理| 查看: 265

主要是根据黑马程序员的一门Flask快速入门课程记录的笔记。 视频地址:https://www.bilibili.com/video/av19817183/?p=15

1.原始的表单验证

页面代码:

Title 用户名: 密码: 确认密码: {# 使用遍历获取闪现的消息 #} {% for message in get_flashed_messages() %} {{ message }} {% endfor %}

验证代码:

# 表单 Flask-WTF扩展 ''' 目的:实现一个简单的登陆的逻辑处理 1.路由需要有get和post两种请求方式 --> 需要判断请求方式 2.获取请求的参数(从表单中拿到数据) 3.判断参数是否填写,以及密码是否相同 4.如果判断都没有问题,就返回一个success ''' ''' 给模板传递消息 flash --> 需要对内容加密,因此需要设置secret_key,做加密消息的混淆 模板中需要遍历flash消息 ''' from flask import Flask, render_template, request, flash app = Flask(__name__) app.secret_key = 'itheima' @app.route('/', methods=['GET','POST']) def index(): #request:请求对象 --> 获取请求方式、数据 #1. 判断请求方式 if requesthod == 'POST': # 2.获取请求的参数 request(通过input中的name值) username = request.form.get('username') password = request.form.get('password') password2 = request.form.get('password2') print(username,password,password2) # 3.判断参数是否填写&密码是否相同(u是为了解决编码问题) if not all([username,password,password2]): # print('参数不完整') flash(u'参数不完整') elif password != password2: # print('密码不一致') flash(u'密码不一致') else: return 'success' return render_template('form.html') if __name__ == '__main__': app.run(debug=True)

2.Flask-WTF的表单验证

WTForms常用验证函数:

DataRequireed 确保字段中有数据EnqualTo 比较两个字段的值,常用于比较两次密码输入Length 验证输入的字段长度NumberRange 验证输入的值在数字范围内URL 验证URLAnyOf 验证输入值在可选列表中NoneOf 验证输入值不在可选列表中

使用Flask-WTF需要配置参数SECRET_KEY。

CSRF_ENABLED是为了CSRF(跨站请求伪造)保护。SECRET_KEY用来生成加密令牌,当CSRF激活的时候,该设置会根据设置的密钥生成加密令牌。

页面代码:

Title {# 设置scrf_token #} {{ form.csrf_token() }} {{ form.username.label }}{{ form.username }} {{ form.password.label }}{{ form.password }} {{ form.password2.label }}{{ form.password2 }} {{ form.submit }}

逻辑代码:

#coding=utf-8 #python3中的reload的使用 import importlib from flask import Flask, render_template, request, flash app = Flask(__name__) # 导入tf扩展的表单类 from flask_wtf import FlaskForm #导 入自定义表单需要的字段 from wtforms import SubmitField, StringField, PasswordField #导入wtf扩展提供的表单验证 from wtforms.validators import DataRequired, EqualTo # 解决编码问题 import io,sys # sys.stdout = io.TextIOWrapper(sys.stdout.detch(), encoding='utf-8') # sys.stderr = ioTextIOWrapper(sys.stderr.detch(), encoding='utf-8') # importlib.reload(sys) # sys.set # 自定义表单类、文本字段、密码字段、提交按钮 # 使用WTF实现表单 需要自定义一个表单类 class LoginForm(FlaskForm): # StringField/PasswordField是区别文本框类型, 用户名/密码是指定label值, validators 就是指明要验证哪些项 username = StringField('用户名:', validators=[DataRequired()]) password = PasswordField('密码:',validators=[DataRequired()]) password2 = PasswordField('确认密码:', validators=[DataRequired(), EqualTo('password', '密码填入的不一致')]) submit = SubmitField('提交') # 定义根路由视图函数,生成表单对象,获取表单数据,进行表单数据验证 @app.route('/form',methods=['GEt','POST']) def login(): # 由RegisterForm类生成一个表实例 login_form = LoginForm() # 逻辑处理 if requesthod == 'POST': # 获取请求的参数 username = request.form.get('username') password = request.form.get('password') password2 = request.form.get('password2') # 调用validation_on_submit方法,可以一次性执行完所有验证函数的逻辑 if login_form.validate_on_submit(): # 进入这里就表示所有的逻辑都验证成功 print(username) return 'success' else: #message = register_form.get('password2')[0] #flash(message) flash('参数有误') # 把实例化后的register_form传入到页面wtf.html中 return render_template('wtf.html',form=login_form) @app.route('/') def index(): return render_template('index.html') if __name__ == '__mian__': app.run()


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3