flask表单的实现

目录

表单:

flask-WTF表单介绍

表单常用字段类型及渲染

通过表单存储数据 

表单验证

图片上传


表单:

       什么是表单呢?输入框,密码框,文本域 下拉菜单,单选,多选,这些都叫表单。

常见的表单元素:

表单标签   <form>

        action -- 表单提交的URL地址

        method -- 表单请求方式(GET,POST)

        enctype -- 请求内容的形式 

                         POST普通表单提交 :application/x-www-form-urlencoded     

                         大型文件的时候提交:multipart/form-data 

单行文本框/多行文本框

textarea多行文本
text单行文本
password密码
email邮箱
urlURL

选择框(单选/多选/下拉选择)

radio 单选框
checkbox 多选框
  <select><option></option></select>下拉选择

隐藏表单域

<input type = 'hidden'>

按钮

<input type = 'botton'>  或  <botton> </botton>

文件上传框

<input type = 'file'>

 在视图中获取表单值:

GET请求:request.args.get('name','None')

POST请求:request.form.get('name','None')

flask-WTF表单介绍

集成 wtforms

CSRF保护

与Flask-Uploads 一起支持文件上传

安装:

pip安装: pip install flask-WTF

源码安装: python setup.py install

配置(CSRF保护)

WTF_CSRF_SECRET_KEY='a random string'  (后面这随意写 )

app.config['WTF_CSRF_SECRET_KEY']='a random string'

表单常用字段类型及渲染

                        

文本/字符串
StringField字符串输入
PasswordField密码输入
TextAreaField长文本框输入
HiddenField隐藏表单域
数值(整数,小数)
FloatField浮点数输入
IntegerField整数输入
DecimalField小数输入(更精确)
选择
RadioFieldradio单选
SelectField下拉单选
SelectMultipleField下拉多选
BooleanField勾选(复选框)

 

日期
DateField日期选择
DateTimeField日期时间选择

 

文件/文件上传
Field文件单选
MultipleFileField文件多选

其他 
SubmitField提交按钮
FieldList自定义的表单选择列表(如:选择用户对象)
FormField自定义多个字段构成的选项
labellabel标签(如:输入框前的文字描述)
default表单的默认值
validators表单验证规则
widget定制界面显示方式(如:文本框/选择框)
description 帮助文字

 使用模板语法渲染表单内容:

表单输入区域:{{form.username}}

表单tabel: {{form.username.label.text}}

通过表单存储数据 

第一步:检测表单是否已经通过验证(用户在提交表单的情况下会触发)

        form.validate_on_submit()   通过即返回True

第二步:获取表单中传递过来的值:

        form.field_name.data

第三步:业务逻辑的书写(可结合ORM)

CSRF表单保护:

默认开启CSRF保护

关闭单个CSRF保护: form = LoginForm(csrf_enabled=Flase)

全局关闭(不推荐)

WTF_CSRF_ENABLED=Flase、

同步请求CSRF保护:

模板中添加csrf_token:

        {{form.csrf_token}}或

       <input type ='hidden' name='csrf-token' value='{{ csrf-token()}}'>

当出现这个错误的时候,添加了csrf_enabled=False,然后直接在模板中添加 {{form.csrf_token}}  这句代码就可以了,他其实就是触发了csrf的保护机制而已。

表单验证

1.导入内置的表单验证器(或自定义):

from wtfforms.validators import DateRequiired

2.配置到表单字段

username = StringField('用户名',validators =[InputRequired(),my_validator])

DateRequired/InputRequired  必填

Email/URL/UUID--电子邮箱/URL/UUID

Length(min=-1,max=-1,message=None 长度范围验证

EquaITo(fieldname,mesage=None)

必传参数/密码:

 password = PasswordField(label='密码', validators=[DataRequired('请输入密码')])

图片上传

不使用WTF上传:

首先设置<form>的enctype  

encype = 'multipart/form-data'

(application/x-www-form-urlencoded不是不能上传文件,是只能上传文本格式的文件,multipart/form-data是将文件以二进制的形式上传,这样可以实现多种类型的文件上传。)

第二步:在视图函数中获取文件对象  request.files

第三步:保存文件 : f.save()

使用FileField并添加类型验证:

文件名称格式化:werkzeug.utils.secure_filename

secure_filename()函数将会对传入的文件路径进行处理,将其中的路径符号“/”用下划线代替,防止被黑客恶意攻击

@app.route('/avator', methods=['GET', 'POST'])
def avator_uploads():
    """图片上传"""
    form = UserAvatarForm()  # 获取form
    if form.validate_on_submit():  # 进行表单是否通过验证
        img = form.avatar.data  # 获取图片对象
        f_name = secure_filename(img.filename)  # 获取图片名称
        file_path = os.path.join(app.config['UPLOAD_PATH'], f_name)  #保存的路径
        img.save(file_path)
        return redirect(url_for('page_form'))

    else:
        print(form.errors)
    return render_template('avator.html', form=form)

图片上传:验证:

FileRequired文件必须上传验证
FileAllowed文件类型验证
from flask_wtf.file import FileRequired, FileAllowed


class UserAvatarForm(FlaskForm):
    """图片上传"""
    avatar = FileField(label='上传头像', validators=[
        FileRequired(''),
        FileAllowed(['jpg'], '仅支持JPG文件格式上传')
    ])

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
实现登录功能需要前端页面、后端代码和数据库三部分配合完成。以下是一个简单的示例: 1. 前端页面(login.html): ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Login</title> </head> <body> <h1>Login</h1> <form action="login.php" method="POST"> <label for="username">Username:</label> <input type="text" name="username" id="username"><br><br> <label for="password">Password:</label> <input type="password" name="password" id="password"><br><br> <input type="submit" name="submit" value="Login"> </form> </body> </html> ``` 2. 后端代码(login.php): ```php <?php // 连接数据库 $servername = "localhost"; $username = "root"; $password = ""; $dbname = "test"; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } // 处理登录请求 if ($_SERVER["REQUEST_METHOD"] == "POST") { $username = $_POST["username"]; $password = $_POST["password"]; $sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'"; $result = $conn->query($sql); if ($result->num_rows > 0) { echo "Login successful!"; } else { echo "Invalid username or password!"; } } // 关闭数据库连接 $conn->close(); ?> ``` 3. 数据库表结构(test.users): ```sql CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL, `password` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ``` 以上示例中,前端页面使用 HTML 和 CSS 样式构建,表单的提交方式为 POST,将数据发送到后端代码的 login.php 文件。后端代码使用 PHP 语言处理请求,从数据库中查询用户名和密码是否匹配。数据库使用 MySQL 存储用户信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱喝可乐的宝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值