flask 表单

app

from flask import Flask
from flask_script import Manager
from App.ext import db
from App.views import blue

app = Flask(__name__)
app.config.from_pyfile("settings.py")
db.init_app(app)
manager = Manager(app)
app.register_blueprint(blue)

if __name__ == '__main__':
    manager.run()

App.ext

from flask_sqlalchemy import SQLAlchemy

#数据库对象
db = SQLAlchemy()

settings

DEBUG = True
SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:19970223@localhost:3306/sess"
SQLALCHEMY_TRACK_MODIFICATIONS = False
# 签名加密
SECRET_KEY = "i9490kl*(780990HGjhsoid7872378287mn,,.,ghghY!@3"

App.views

from flask import Blueprint, render_template,redirect,request
from App.ext import db
from App.models import User

from App.forms import RegisterForm
import hashlib

blue = Blueprint("blue",__name__)


@blue.route("/register/",methods=['GET','POST'])
def register_user():
    form = RegisterForm()
    if request.method == 'POST':
        # 验证成功,返回True,否则返回False
        if form.validate_on_submit():
            # 获取验证数据
            username = form.username.data
            password = form.password.data
            user = User(username=username)
            # 保存用户信息
            user.password = hashlib.sha1(password.encode('utf8')).hexdigest()
            db.session.add(user)
            db.session.commit()
            return redirect("/")
    return render_template("register.html",**locals())

App.forms

import re
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField
from wtforms.fields.html5 import EmailField
from wtforms.validators import DataRequired, Length, EqualTo, Email, ValidationError

from App.models import User

# 自定义验证函数有两个参数,第一个表单对象,
# 第二个参数要验证的字段对象,用户输入的值是字段对象的data属性
def check_phone(form1,field):
    if not re.match(r'(13\d|14[5|7]|15\d|166|17[3|6|7]|18\d)\d{8}$',field.data):
        raise ValidationError("电话号码不符合规则")


class RegisterForm(FlaskForm):
    username = StringField("用户名",validators=[DataRequired("用户名必须输入")])
    password = PasswordField("密码",validators=[DataRequired("密码必须输入"),Length(min=3,max=12,message="密码长度必须在3-12位")])
    confirm = PasswordField("确认密码",validators=[EqualTo("password",message="两次密码不一致")])
    email = EmailField("邮箱",validators=[Email("邮箱格式错误")])
    phone = StringField("电话",validators=[check_phone])

    # 验证用户是否重名
    # 自定义的验证方法: validate_字段名
    def validate_username(self,field):
        # value是一个对象,获取用户输入的值应该是field.data
        print(field.data)
        user = User.query.filter(User.username==field.data).first()
        if user:
            raise ValidationError("用户名重名")
        return field

App.models

from App.ext import db

class User(db.Model):
    __tablename__ = 'user'

    uid = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(30), nullable=False)
    password = db.Column(db.String(128), nullable=False)
    gender = db.Column(db.Integer)

register.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户注册</title>
    <style>
        span{
            color: red;
        }
    </style>
</head>
<body>
<form action="" method="post">
    {{  form.csrf_token  }}
    <p>
    用户名:<input type="text" name="username">
    {% for error in form.username.errors %}
        <span>{{ error }}</span>
    {% endfor %}
    </p>
    <p>
        密码:<input type="password" name="password">
        {% for error in form.password.errors %}
            <span>{{ error }}</span>
        {% endfor %}
    </p>
    <p>
        确认密码:<input type="password" name="confirm">
        {% for error in form.confirm.errors %}
            <span>{{ error }}</span>
        {% endfor %}
    </p>
    <p>
        email: <input type="text" name="email">
        {% for error in form.email.errors %}
            <span>{{ error }}</span>
        {% endfor %}
    </p>
    <p>
        电话:<input type="text" name="phone">
        {% for error in form.phone.errors %}
            <span>{{ error }}</span>
        {% endfor %}
    </p>

    <input type="submit">
    
</form>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值