Flask教程(二)

藏宝库编辑 2024-9-10 09:01:34 55 0 来自 中国
一、Flask的数据库SQLAlchemy
1.1 SQLAlchemy简介:
                SQLAlchemy是一个关系型数据库框架,它提供了高层的ORM和底层的原生数据库的操作。
                flask-sqlalchemy是一个简化了SQLAlchemy操作的flask扩展。
1.2 SQLAlchemy的使用:
1.2.1安装导入:    安装flask_sqlalchemy
                            from flask import Flask
from flask_sqlalchemy importSQLAlchemy
1.2.2创建flask的app:
                            app = Flask(__name__)
1.2.3配置SQLAlchemy参数:
                            class Config(object):
                            """配置参数"""
                            # sqlalchemy的配置参数
                            SQLALCHEMY_DATABASE_URI= "mysql://root:mysql@127.0.0.1:3306/db_python04"
数据库类型://用户名:密码@数据库地址:端口号/数据库名
                            # 设置sqlalchemy自动更跟踪数据库
                            SQLALCHEMY_TRACK_MODIFICATIONS= True
1.2.4添加配置到app:
                            app.config.from_object(Config)
1.2.5创建数据库sqlalchemy工具对象:
db = SQLAlchemy(app)
1.2.6定义数据库表:
                            class Role(db.Model):
                            """用户角色/身份表"""
__tablename__ = "tbl_roles"        #表名
id = db.Column(db.Integer, primary_key=True)    #表的主键
                                    name = db.Column(db.String(32), unique=True)
                                    users = db.relationship("User", backref="role")
                                    def __repr__(self):
                                    """定义之后,可以让显示对象的时候更直观"""
                                            return "Role object: name=%s" % self.name
1.2.7启动函数执行的命令:
                            if __name__ == '__main__':
                                    # 清除数据库里的所有数据
                                    db.drop_all()
                                    # 创建所有的表
                                    db.create_all()
                                    # 创建对象
                                    role1 = Role(name="admin")
                                    # session记录对象任务
db.session.add(role1)
                                    # 提交任务到数据库中
db.session.commit()
二、数据库迁移
2.1首先要在虚拟环境中安装Flask-Migrate:
pip install flask-migrate
2.2导入相关文件:
                from flask_migrate importMigrate,MigrateCommand
from flask_script import Shell,Manager
2.3使用Manager管理我们创建的app:
                app = Flask(__name__)
manager = Manager(app)
2.4配置数据库参数,同上1.2.3
2.5使用migrate将配置的数据库与app关联起来:
#第一个参数是Flask的实例,第二个参数是Sqlalchemy数据库实例
migrate = Migrate(app,db)
2.6在flask-Script中的manager中添加一个db命令:
manager.add_command('db',MigrateCommand)
2.7定义模型类,同上1.2.6
2.8运行管理器:
                if __name__ == '__main__':
manager.run()
2.9创建迁移仓库,在命令行输入:
                #这个命令会创建migrations文件夹,所有迁移文件都放在里面。
 python code.py db init
2.10创建迁移脚本,同Django类似,有两个命令:
                #创建自动迁移脚本
                python code.py db migrate-m 'initial migration'  #后面为脚本的备注
                #更新数据库
                python code.py db upgrade
三、发送邮件
3.1Flask框架使用Flask-Mail扩展包实现发送邮件功能
3.2使用QQ邮箱的smtp服务器:
3.3在代码中导入Flask-Mail扩展包:
from flask_mail import Mail, Message
3.4配置发送邮件需要的参数:
#配置邮件:服务器/端口/传输层安全协议/邮箱名/密码
                    app.config.update(
                                DEBUG = True,
                                MAIL_SERVER='smtp.qq.com',
                                MAIL_PROT=465,
                                MAIL_USE_TLS = True,
                                MAIL_USERNAME = '371673381@qq.com',
                                MAIL_PASSWORD = 'goyubxohbtzfbidd',
                      )
3.5关联app:
                    mail = Mail(app)
3.6在视图函数中的处理:
# sender 发送方,recipients 接收方列表
                msg = Message("This is a test ",sender='371673381@qq.com', recipients=                                                              ['371673381@qq.com'])
#邮件内容
                msg.body = "Flask test mail"
                #发送邮件
                mail.send(msg)
四、Flask中的蓝图
4.1蓝图简介:蓝图是用于实现单个应用的视图、模板、静态文件的集合
4.2蓝图的初始化:
                    #Blueprint必须指定两个参数,admin表示蓝图的名称,__name__表示蓝图所在模块
admin = Blueprint('admin',__name__)
4.3注册蓝图路由:
@admin.route('/')
                    def admin_index():
                                return 'admin_index'
4.4在程序实例中注册该蓝图:
app.register_blueprint(admin,url_prefix='/admin')
五、单元测试
5.1单元测试的意义:
Web程序开发过程一般包括以下几个阶段:[需求分析,设计阶段,实现阶段,测试阶段]。其中测试阶段通过人工或自动来运行测试某个系统的功能。目的是检验其是否满足需求,并得出特定的结果,以达到弄清楚预期结果和实际结果之间的差别的最终目的。
5.2测试的分类:单元测试、集成测试、系统测试等,其中单元测试是由开发人员进行的
5.3单元测试的方法:开发者编写一小段代码,检验目标代码的功能是否符合预期。通常情况下,单元测试主要面向一些功能单一的模块进行。
5.4单元测试中断言(assert)的使用:
5.4.1常用的断言方法:
                assertEqual     如果两个值相等,则pass
                assertNotEqual  如果两个值不相等,则pass
                assertTrue      判断bool值为True,则pass
                assertFalse     判断bool值为False,则pass
                assertIsNone    不存在,则pass
                assertIsNotNone 存在,则pass
5.5单元测试的基本写法:
5.5.1定义一个类,继承自unittest.TestCase:
                import unittest
 class TestClass(unitest.TestCase):
                        #该方法会首先执行,方法名为固定写法
def setUp(self):
                                pass
                        #测试代码,函数命名格式一定以test_开头
def test_app_exists(self):
                                pass
                        #该方法会在测试代码执行完后执行,方法名为固定写法
def tearDown(self):
                                pass
六、Flask的部署
6.1Flask部署示意图:
6.2由上图可以看出,Flask部署主要方式是Nginx+gunicorn+flask
其中Gunicorn(绿色独角兽)是一个Python WSGI的HTTP服务器,
优点是Gunicorn直接用命令启动,不需要编写配置文件,相对uWSGI要容易很多。
6.3Gunicorn的安装:pip install gunicorn
6.4运行Gunicorn
#指定进程和端口号: -w: 表示进程(worker)-b:表示绑定ip地址和端口号(bind)。
$gunicorn -w 4 -b 127.0.0.1:5001 运行文件名称:Flask程序实例名
6.5安装Nginx:$sudo apt-get install nginx
6.6nginx的相关指令:先进入/usr/local/nginx/目录
                #启动
sudo sbin/nginx
                #查看
ps aux | grep nginx
                #停止
sudo sbin/nginx -s stop
6.7修改nginx配置:打开/usr/local/nginx/conf/nginx.conf文件
            server {
                    # 监听80端口
                    listen 80;
                    # 本机
                    server_name localhost;
                    # 默认请求的url
                   location /{
                            #请求转发到gunicorn服务器
proxy_pass http://127.0.0.1:5001;
                            #设置请求头,并将头信息传递给服务器端
                            proxy_set_header Host $host;
                    }
              }
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-23 18:25, Processed in 0.142802 second(s), 33 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表