请选择 进入手机版 | 继续访问电脑版
MSIPO技术圈 首页 IT技术 查看内容

Flask学习笔记(三)

2023-07-13

Flask学习笔记(三)


这一章主要是项目实战中一些笔记记录,这一系列的学习笔记和工程项目都放在了github仓库。

1.BBS论坛搭建

1.项目模块划分,目录结构搭建。
2.每个模块注册蓝图,并绑定。

#1.views.py注册蓝图
from flask import Blueprint
bp=Blueprint('cms',__name__,url_prefix='/cms')
@bp.route('/')
def index():
    return "cms index"
#2.__init__.py导入蓝图
from .views import bp
#3.app.py绑定蓝图
from apps.cms import bp as cms_bp
app.register_blueprint(cms_bp)

3.数据库配置,连接,迁移控制。这里本来用了flask-script,但migrate的新版不支持他了,所以就不用script了。

#1.config.py文件中配置数据库信息
DEBUG=True
DB_USERNAME="root"
DB_PASSWORD="190023"
DB_HOST="127.0.0.1"
DB_PORT="3306"
DB_NAME="bbs_cms"
DB_URI="mysql+pymysql://%s:%s@%s:%s/%s?charste='utf8" % (DB_USERNAME,DB_PASSWORD,DB_HOST,DB_PORT,DB_NAME)
SQLALCHEMY_DATABASE_URI=DB_URI
SQLALCHEMY_TRACK_MODIFIER=False
#2.exts.py文件中导入sqlalchemy的实例化对象db
from flask_sqlalchemy import SQLAlchemy
db=SQLAlchemy()
#3.在app.py文件中用flask-migrate管理数据库
from flask_migrate import Migrate
from exts import db
def create_app():
    app=Flask(__name__)
    app.config.from_object(config)
    db.init_app(app)
    app.register_blueprint(cms_bp)
    app.register_blueprint(front_bp)
    app.register_blueprint(common_bp)
    migrate=Migrate(app,db)
    return app
if __name__ =="__main__":
    app=create_app()
    app.run()

4.模型建立,并把模型映射到数据中

#1.models.py文件中建立模型
from exts import db
from datetime import datetime
class CMSUser(db.Model):
    __tablename__ = 'cms_user'
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    username=db.Column(db.String(50),nullable=False)
    password=db.Column(db.String(50),nullable=False)
    email=db.Column(db.String(50),nullable=False,unique=True)
    join_time=db.Column(db.DateTime,default=datetime.now())
#2.模型导入到app.py文件中
from apps.cms import models
#3.在终端中进行映射三部曲
flask db init
flask db migrate
flask db upgrade

5.用命令行参数形式添加cms人员。

#1.在commands.py文件中定义命令行创建数据的函数
from apps.cms import models as cms_models
from exts import db
import click
CMSUser=cms_models.CMSUser
@click.option("-e","--email",required=True)
@click.option("-u","--username",required=True)
@click.option("-p","--password",required=True)
def create_cms_user(email,username,password):
    user=CMSUser(username=username,email=email,password=password)
    db.session.add(user)
    db.session.commit()
    print('cms用户添加成功')
#2.在app.py文件中导入并在create-app时,加入命令行函数
import commands
def create_app():
...
migrate=Migrate(app,db)
#3.命令行里面用参数添加数据
flask add_cms_user -e 18811752638@163.com -u zoe -p 111111

5.对数据库的密码保存经过加密

#在models,py文件里面对CMSUser模型重新定义,数据库内部用_password,但外部操作都用password,并进行hash加密解密
from exts import db
from datetime import datetime
from werkzeug.security import generate_password_hash,check_password_hash
class CMSUser(db.Model):
    __tablename__ = 'cms_user'
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    username=db.Column(db.String(50),nullable=False)
    _password=db.Column(db.String(200),nullable=False)
    email=db.Column(db.String(50),nullable=False,unique=True)
    join_time=db.Column(db.DateTime,default=datetime.now())
    def __init__(self,username,password,email):
        self.username=username
        self.password=password
        self.email=email
    @property#讲一个方法变成属性,可属性方式访问,即user.password,返回的是self._password。
    def password(self):
        return self._password
    @password.setter#定义了password的set方法,即user.password('abc'),将值传入
    def password(self,raw_password):
        self._password=generate_password_hash(raw_password)
    def check_password(self,raw_password):
        result=check_password_hash(self.password,raw_password)#这里的self.password调用了上面的函数,return self._password
        return result

相关阅读

热门文章

    手机版|MSIPO技术圈 皖ICP备19022944号-2

    Copyright © 2024, msipo.com

    返回顶部