📜  mydynamica (1)

📅  最后修改于: 2023-12-03 15:17:45.395000             🧑  作者: Mango

MyDynamica

MyDynamica 是一个开源、轻量级的 Web 框架,它基于 Python 语言和 WSGI 协议。MyDynamica 极易学习和使用,同时具有高度可定制性和扩展性。如果你正在寻找一个快速开发 Web 应用的框架,那么 MyDynamica 可能是你的不二之选。

特性
  • 轻量级:MyDynamica 只依赖于 Python 标准库,不需要额外的依赖项。
  • 可定制性高:MyDynamica 接口简单,易于个性化定制。
  • 扩展性强:MyDynamica 支持插件机制,可轻松扩展框架的功能。
  • 支持模版引擎:MyDynamica 内置模版引擎,支持多种模版语言。
  • 功能完备:MyDynamica 内置了许多功能强大的库,如 Session、Logging、JSON 解析器等。同时它也支持自定义的中间件,使得你可以轻松地添加额外的功能。
安装

你可以使用 pip 安装 MyDynamica:

pip install mydynamica
快速入门

下面是一个简单的 MyDynamica 应用示例,你可以将它保存为 app.py 并运行它:

from mydynamica import MyDynamica

app = MyDynamica()

@app.route('/')
def index():
    return 'Hello, MyDynamica!'

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

你也可以使用命令行运行示例:

$ python app.py runserver

现在访问 http://localhost:8000/ 就可以看到应用程序返回的消息。

路由

MyDynamica 的路由系统非常简单易用。你可以使用 @app.route() 装饰器来定义 URL 路径以及对应的视图函数。视图函数返回的字符串将会作为响应发送给客户端。

带参数的路由

MyDynamica 支持从 URL 中获取参数。你只需要在路径中使用占位符即可:

@app.route('/articles/<int:id>')
def show_article(id):
    return f'Showing article {id}'

在上面的示例中,<int:id> 表示参数 id 只能是整数类型。如果你想使用其他类型的参数,可以使用如下占位符:

  • <int:xxx>:整数类型。
  • <float:xxx>:浮点数类型。
  • <path:xxx>:接收除 '/' 外的所有字符(包括路径分隔符)。
路由前缀

你可以使用 @app.route_prefix() 装饰器来为视图函数设置前缀:

@app.route_prefix('/api')
def api():
    pass

@app.route('/user')
def user_api():
    pass

@app.route('/post')
def post_api():
    pass

在上面的示例中,/api/user/api/post 是完整的路由路径。

中间件

MyDynamica 支持中间件,你可以使用 @app.middleware() 装饰器来添加中间件:

from mydynamica import Request, Response

@app.middleware()
def my_middleware(request: Request, next):
    print('Before handling request')
    response = next(request)
    print('After handling request')
    return response

@app.route('/')
def index():
    return 'Hello, MyDynamica!'

在上面的示例中,我们定义了一个名为 my_middleware 的中间件函数。其参数为 requestnextrequest 表示客户端的请求,next 表示下一个中间件或路由函数。

在中间件函数中,我们可以对请求或响应进行一些操作,然后将请求传递给下一个中间件或路由函数。中间件函数必须返回一个 Response 类型的实例。

模版引擎

MyDynamica 支持多种模版引擎,包括 Jinja2、Mako、Tornado 和 Django。你可以使用 @app.template() 装饰器来渲染模板:

from mydynamica import render_template

@app.route('/')
def index():
    return render_template('index.html', title='MyDynamica')

# index.html
<!DOCTYPE html>
<html>
<head>
    <title>{{ title }}</title>
</head>
<body>
    <h1>Hello, MyDynamica!</h1>
</body>
</html>

在上面的示例中,我们使用了 Jinja2 模板引擎来渲染 index.html 模板文件。render_template 函数的第一个参数是模板文件的名称,其余参数为关键字参数,表示模板变量。