一、标准Flask架构搭建
①config.py
新建一个文件config.py,在其中进行参数初始化,再使用下面代码加载到app.py(主程序)中
import config
app.config.from_object(config) #由config.py初始化
②exts.py
用于放置扩展模块(如数据库),可以防止循环引用。
db对象在app.py中进行绑定
from exts import db
db.init_app(app)
③blueprint
将路由从app.py中分离出来,便于开发和维护(模块化)
可以视为Flask的子模块Flask(__name__)
from flask import Blueprint
bp = Blueprint("auth",__name__,url_prefix="/auth") #蓝图名,Flask识别标号,url前缀
#由蓝图创建路由
bp.route('/login')
def login():
pass
from blueprints.qa import bp as qabp
from blueprints.auth import bp as authbp
#----蓝图绑定----#
app.register_blueprint(qabp)
app.register_blueprint(authbp)
二、模型的实现
①数据库连接的初始化
在config.py中写入如下代码,完成配置
#----配置数据库连接参数----#
HostName=
Port = #默认为3306,需要自行修改
UserName= #默认用户名
Password=
DataBase=
SQLALCHEMY_DATABASE_URI = f"mysql+pymysql://{UserName}:{Password}@{HostName}:{Port}/{DataBase}?charset=utf8mb4"
②构建模型
class UserModel(db.Model):
__tablename__="user"
id = db.Column(db.Integer,primary_key=True,autoincrement=True) #主键
username = db.Column(db.String(100),nullable=False)
password = db.Column(db.String(100),nullable=False)
eamil = db.Column(db.String(100),nullable=False)
join_time = db.Column(db.DateTime,default=datetime.now,nullable=False)
③迁移到数据库中
在app.py中进行配置和操作
from models import UserModel
from flask_migrate import Migrate
migrate = Migrate(app,db)
依次使用以下脚本
flask db init
flask db migrate
flask db upgrade
三、注册页面和登录页面的实现
①验证码发送
需要安装flask-mail组件
pip install flask-mail
然后要配置邮件服务商,这里以QQ邮箱为例
在QQ邮箱中:设置-账户,找到POP3/SMTP服务,开启
开启后会生成一个授权码,注意保密
随后在config.py中对邮箱进行配置
#----邮箱配置----#
MAIL_SERVER = 'smtp.qq.ccom'
MAIL_USE_SSL = True
MAIL_POST = 465
MAIL_USENAME = '' #你的邮箱
MAIL_PASSWORD = '' #授权码
MAIL_DEFAULT_SENDER = '' #你的邮箱
在exts.py中对邮箱对象构建
from flask_mail import Mail
mail = Mail()
最后再app.py中进行初始化
from exts import mail
mail.init_app(app)
进行邮件发送
from exts import mail
from flask_mail import Message
@bp.route("/mail/test")
def send_test():
message = Message(
subject='邮箱测试',
recipients=['目标邮箱'],
body='这是一条测试邮件')
mail.send(message)
return "邮件发送成功"
生成验证码
source = string.digits*4
code = random.sample(source,4) #结果为列表
codestr = "".join(code) #第一个参数为连接符号,这里设置为空
print(codestr)