flask 项目配置

创建项目

在这里插入图片描述

在这里插入图片描述

连接数据库 安装

pip install flask-sqlalchemy
pip install pymysql

在这里插入图片描述

在这里插入图片描述

用户模型定义和映射

models / auth
在这里插入图片描述

pip install shortuuid

import shortuuid as shortuuid
from werkzeug.security import generate_password_hash, check_password_hash

from exts import db
from datetime import datetime
class UserModel(db.Model):
    __tablename__ = "user"
    # shortuuid  正常来说主键都是整型和自增长的,但是再商业网站事不合适的,比如用户中心 用户的主键 能猜出网站多少人,通过自增长的id
    id = db.Column(db.String(100), primary_key=True, default=shortuuid.uuid)
    email = db.Column(db.String(50), unique=True, nullable=False)
    username = db.Column(db.String(50), nullable=False)
    _password = db.Column(db.String(200), nullable=False)
    avatar = db.Column(db.String(100))
    signature = db.Column(db.String(100))
    join_time = db.Column(db.DateTime, default=datetime.now)
    is_staff = db.Column(db.Boolean, default=False)
    is_active = db.Column(db.Boolean, default=True)


    def __init__(self, *args, **kwargs):
        if "password" in kwargs:
            self.password = kwargs.get('password')
            kwargs.pop("password")
        super(UserModel, self).__init__(*args, **kwargs)

    @property
    def password(self):
        return self._password

    @password.setter
    def password(self, newpwd):
        self._password = generate_password_hash(newpwd)

    def check_password(self, rawpwd):
        return check_password_hash(self.password, rawpwd)

代码详解

这是一个使用Python语言编写的类中的密码属性的代码。这个类中包含一个私有的属性"_password",通过@property装饰器定义了一个密码属性"password",并且通过@password.setter装饰器定义了一个setter方法,用于设置新密码。在这个setter方法中,新密码会被加密后存储到"_password"属性中,这里使用了"generate_password_hash"函数进行密码加密。这样做可以增强密码的安全性,防止密码被恶意破解。

映射倒数据库

pip install flask-migrate

在这里插入图片描述

目前app.py项目住入口和模型类没有产生关联,需要导入模块
在这里插入图片描述
执行迁移

flask db init
flask db migrate
flask db upgrade

新建蓝图
apps/front/views
在这里插入图片描述


from flask import Blueprint,request,render_template

bp = Blueprint("front",__name__,url_prefix="/")


@bp.route('/')
def hello_word():
    return 'hello world'



@bp.route("/login",methods=["GET","POST"])
def loging():
    if request.method=="GET":
        return render_template("front/login.html")



@bp.route("/register",methods=["GET","POST"])
def register():
    if request.method=="GET":
        return render_template("front/register.html")

front/init

from .views import bp as front_bp

让视图和项目入口文件app产生关联
app.py

在这里插入图片描述

注册蓝图
在这里插入图片描述

配置邮箱发送邮件

# cbteirudavfecbdfa

# MAIL_USE_TLS:端口号587
# MAIL_USE_SSL:端口号465
# QQ邮箱不支持非加密方式发送邮件
# 发送者邮箱的服务器地址
MAIL_SERVER = "smtp.qq.com"
MAIL_PORT = 587
MAIL_USE_TLS = True
# MAIL_USE_SSL = True
MAIL_USERNAME = "455636959@qq.com"
MAIL_PASSWORD = "cbteirudavfecbdfa"
MAIL_DEFAULT_SENDER = "455636959@qq.com"

在这里插入图片描述

实现邮箱验证码的发送

pip install flask-mail

在这里插入图片描述

@bp.get("/email/captcha")
def email_captcha():
    # /email/captcha?email=xx@q.com
    email = request.args.get('email')
    if not email:
        return jsonify({'code':400,'message':'请先传入邮箱!'})
    # 产生随机六位数字
    source = list(string.digits)
    captcha = "".join(random.sample(source,6))
    # subject 主题 recipients 接收者
    message = Message(subject='【滴滴】注册验证码',recipients=[email],body='【滴滴】您的注册验证码为:%s'%captcha)
    try:
        mail.send(message)
    except Exception as e:
        print('邮件发送失败!')
        print(e)
        return jsonify({'code':500,'message':'邮件发送失败'})
    return jsonify({'code': 200, 'message': '邮件发送成功'})

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

X~~X~~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值