Flask(二)

楔子

上一篇介绍了怎样创建第一个简单的flask项目,在学习Django的时候,我们知道Django具备一种叫做MTV模式,其中M(model)代表数据模型层,T(template)代表视图层(存放页面等), V(view)控制层(处理各种逻辑)。然而其实我们创建完一个flask项目之后,很明显可以看出,他目前只存在T–视图层, 所以为了让flask项目的逻辑更加清晰,我们在写flask项目的时候,也将使用到MTV模式

将Flask项目改为MTV模式

1. 新建App文件

这个文件类似于Django中的与项目名同名的文件,主要用于存放settings配置文件以及总路由

settings

import os

# 基础路径
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# 存放页面的路径
TEMPLATES_DIR = os.path.join(BASE_DIR, 'templates')
# 存放静态文件的路径
STATIC_DIR = os.path.join(BASE_DIR, 'static')

注:这个文件主要用于方配置信息

App.py:

from flask import Flask

from App.settings import TEMPLATES_DIR, STATIC_DIR


def create_app():
    app = Flask(__name__, template_folder=TEMPLATES_DIR, static_folder=STATIC_DIR)

    return app

注:在这个App.py文件中主要用于创建app

最基本的配置信息已经配置完成了,这个时候,我们需要改一下manage.py中的某些地方

manage.py:

from flask import Flask

from App.App import create_app

app = create_app()

if __name__ == '__main__':
    app.run()

当然像这样配置完成之后,要想改变端口,或者启动debug,都需要在app.run()中添加属性,这样如果想进入debug调试模式将会比较复杂,所以我们将使用到flask-script库中的Manager来管理这个项目的启动方式

不过这样首先需要安装flask-script

pip install flask-script

manage.py:

from flask import Flask
from flask_script import Manager

from App.App import create_app

app = create_app()
manage = Manager(app)

if __name__ == '__main__':
    manage.run()

像这样配置好之后,可以直接使用下面的命令启动服务
python manage.py runserver -d -p 8000 -h 0.0.0.0

其中-d是指启动debug, -p是端口号, -h是地址, 随便选三者中的一个或多个均可

2. Blueprint蓝图的使用

到这一步,我们需要建立views控制层了,在这里我新建了一个文件夹stu
/stu/views.py

from flask import Blueprint


stu = Blueprint('stu', __name__)


@stu.route('/index/')
def index():
    return '这是首页'

之后我们还需要在App/App.py文件中注册蓝图,在文件中的create_app方法中加入下面代码

from stu.views import stu
app.register_blueprint(blueprint=stu, url_prefix='/stu')

3. models数据模型层

在上面建立的stu文件中新建一个models,这个models可以存放数据模型,具体方法,将在下一个版块详细梳理一次

4. 配置debug模式

在pycharm的右上角有个甲壳虫的图标,这个是以debug模式启动项目,当debug=True的时候,可以通过启动debug模式进行调试。

1)选择菜单中的Run下的debug并选择第一个Edit…启动编辑模式

img

2) 在Parmarters中填写: runserver -d -p 端口号

5. 运行结果

img

猜你喜欢

转载自blog.csdn.net/qgy709830355/article/details/80413162