将标准 Flask 变成 mvc
项目描述
您可以使用此扩展在您的烧瓶应用程序中使用 mvc 模式。
这个现实世界的实现FLASK MVC示例:https ://github.com/negrosdev/negros.dev
安装
运行以下命令进行安装mvc_flask:
$ pip install mvc_flask
配置
要配置mvc_flask您需要在应用程序中导入和注册,例如:
from flask import Flask
from mvc_flask import FlaskMVC
app = Flask(__name__)
FlaskMVC(app)
或使用application factories,例如:
mvc = FlaskMVC()
def create_app():
...
mvc.init_app(app)
默认情况下,mvc_flask假设您的应用程序目录将是app,如果它不存在,则创建它!
如果可以使用其他目录,可以在path初始化 FlaskMVC 实例时使用该参数。例如:
mvc = FlaskMVC()
def create_app():
...
mvc.init_app(app, path='src')
现在,您可以将src其用作准备应用程序的默认目录。
你的结构应该是这样的:
app
├── __ini__.py
├── controllers
│ └── home_controller.py
├── routes.py
└── views
├── index.html
路由器
您可以app/routes.py在创建文件中和之后创建路由,您可以开始注册路由,例如:
from mvc_flask import Router
Router.get("/", "home#index")
必须对POST,PUT和DELETE方法进行同样的操作。例如:Router.post("/messages", "messages#create")
第一个参数表示相对路径,第二个参数表示controller#action. 请记住,我们正在使用MVC pattern,所以我们有controller和action。
controller可以在其中创建,app/controllers并且操作是 的方法controller。
您可以使用Router.all()注册所有路由CRUD。
Router.all("messages")
前面的命令产生这个:
messages.create POST /messages
messages.delete DELETE /messages/<id>
messages.edit GET /messages/<id>/edit
messages.index GET /messages
messages.new GET /messages/new
messages.show GET /messages/<id>
messages.update PATCH, PUT /messages/<id>
您还可以only parameter用来控制路线,例如:
Router.all("messages", only="index show new create")
前面的命令产生这个:
messages.index GET /messages
messages.show GET /messages/<id>
messages.new GET /messages/new
messages.create POST /messages
参数only接受string或array,因此,您可以使用only=["index", "show", "new", "create"]
控制器
现在配置路由,home_controller.py文件必须包含HomeController类,注册action,例如:
class HomeController:
def index(self):
return view("index.html")
如果您有任何疑问,请查看 de app目录以获取更多详细信息。
要将钩子用作before_request,after_request等等......只需在控制器中描述它,请参阅:
class HomeController:
before_request = ["hi"]
def index(self):
return "home"
def hi(self):
...
前面的例子描述了hi(self)每次访问者访问控制器时都会被调用。
意见
Flasktemplates默认使用目录来存储HTMLs文件。但是,使用mvc-flask默认值变为views. 您可以使用该app/views目录来存储模板。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。