在flask中的注册界面中,请完成对email、邮箱验证码(6位数字)、用户名(大于4位小于20位)、密码(大于8位,必须有大小写字母和特殊符号)、确认密码(与密码完全一致)、电话(手机号必须11位),QQ号码(纯数字,不小于5位,不大于15位)的表单数据合法性验证的代码示例。并将这些字段存到sqllite数据库中,提供ORM格式的写法。
时间: 2023-05-22 15:01:34 浏览: 59
以下是一个基本的 Flask 注册表单数据合法性验证的代码示例:
```python
from flask import Flask, render_template, request
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.orm import validates
import re
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(120), unique=True, nullable=False)
username = db.Column(db.String(20), unique=True, nullable=False)
password = db.Column(db.String(120), nullable=False)
phone = db.Column(db.String(11), unique=True, nullable=False)
qq = db.Column(db.String(15), unique=True, nullable=False)
@validates('email')
def validate_email(self, key, email):
if not re.match(r"[^@]+@[^@]+\.[^@]+", email):
raise ValueError('Invalid email address')
return email
@validates('username')
def validate_username(self, key, username):
if len(username) < 4 or len(username) > 20:
raise ValueError('Username must be between 4 and 20 characters')
return username
@validates('password')
def validate_password(self, key, password):
if len(password) < 8:
raise ValueError('Password must be at least 8 characters')
if not any(char.isdigit() for char in password):
raise ValueError('Password must contain at least one digit')
if not any(char.isupper() for char in password):
raise ValueError('Password must contain at least one uppercase letter')
if not any(char.islower() for char in password):
raise ValueError('Password must contain at least one lowercase letter')
if not any(char in '!@#$%^&*()_-+={}[]|\:;"<>,.?/~`' for char in password):
raise ValueError('Password must contain at least one special character')
return password
@validates('phone')
def validate_phone(self, key, phone):
if not re.match(r"^1[3456789]\d{9}$", phone):
raise ValueError('Invalid phone number')
return phone
@validates('qq')
def validate_qq(self, key, qq):
if not re.match(r"^\d{5,15}$", qq):
raise ValueError('Invalid QQ number')
return qq
@app.route('/register', methods=['GET', 'POST'])
def register():
if request.method == 'POST':
email = request.form['email']
username = request.form['username']
password = request.form['password']
confirm_password = request.form['confirm_password']
phone = request.form['phone']
qq = request.form['qq']
try:
user = User(email=email, username=username, password=password, phone=phone, qq=qq)
db.session.add(user)
db.session.commit()
return 'Registration successful'
except ValueError as e:
return str(e)
return render_template('register.html')
```
在这个示例中,我们使用了 Flask 和 SQLAlchemy 来创建一个简单的注册表单,其中包含了 email、邮箱验证码、用户名、密码、确认密码、电话和 QQ 号码等字段。我们使用了 SQLAlchemy 的 ORM 功能来将这些字段存储到 SQLite 数据库中。
在 User 类中,我们使用了 @validates 装饰器来对每个字段进行合法性验证。例如,在 validate_email 方法中,我们使用了正则表达式来验证 email 地址的格式是否正确。如果验证失败,我们会抛出一个 ValueError 异常,这个异常会在注册表单提交时被捕获并返回给用户。
在 register 视图函数中,我们首先从表单中获取所有字段的值,然后创建一个 User 对象并将其添加到数据库中。如果添加成功,我们返回一个成功的消息;否则,我们会捕获 ValueError 异常并将其转换为字符串返回给用户。
这个示例只是一个基本的表单验证示例,你可以根据自己的需求进行修改和扩展。