📜  weblyi (1)

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

Weblyi - 简易Web框架

weblyi-logo

Weblyi是一个简单的Web框架,基于Python语言开发。它使用了一些常见的库来处理HTTP请求和响应,如FlaskWerkzeug。Weblyi的目标是提供一个轻量级且易于使用的框架,使Web开发变得更加容易和快速。

特点
  • 模板引擎支持:Weblyi通过Jinja2的模板引擎实现动态页面渲染。
  • 路由管理:Weblyi可以根据URL路径将请求路由到相应的视图函数。
  • 数据库支持:Weblyi可以通过SQLAlchemy模块访问数据库,支持多种数据库类型。
  • 中间件支持:Weblyi支持实现中间件功能,例如身份验证和请求处理等。
  • 错误处理:Weblyi可以捕获并处理请求过程中发生的错误,并返回合适的错误信息。
安装

通过pip可以安装最新版的Weblyi:

$ pip install weblyi
快速开始

以下代码是一个基本的Weblyi应用程序,它对根路径返回“Hello World!”:

from weblyi import Weblyi

app = Weblyi()

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

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

保存为app.py文件,然后执行以下命令进行启动:

$ python app.py

启动后,你可以在浏览器中访问http://localhost:5000,看到“Hello World!”的输出。

路由管理

Weblyi应用程序通过路由将请求映射到相应的视图函数。可以使用route()装饰器为视图函数添加路由。

@app.route('/hello/')
def hello():
    return 'Hello!'

路由可以包括占位符,例如:

@app.route('/user/<username>')
def show_user_profile(username):
    return 'User %s' % username

路由中的参数可以转换为特定的类型:

@app.route('/post/<int:post_id>')
def show_post(post_id):
    return 'Post %d' % post_id
模板引擎支持

Weblyi使用Jinja2作为模板引擎,可以在Web应用程序中实现动态页面渲染。

以下是一个基本的模板渲染示例:

from weblyi import Weblyi, render_template

app = Weblyi()

@app.route('/hello/<name>')
def hello(name):
    return render_template('hello.html', name=name)

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

在该示例中,render_template()函数将渲染名为hello.html的模板,并将name变量传递到模板中进行处理。

数据库支持

Weblyi使用SQLAlchemy作为ORM库,支持多种数据库类型的访问。以下代码是一个简单的Weblyi应用程序,它使用SQLite数据库存储用户信息:

from weblyi import Weblyi
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    email = Column(String)

engine = create_engine('sqlite:///mydatabase.db')
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()

app = Weblyi()

@app.route('/users/')
def users():
    users = session.query(User).all()
    output = '<ul>'
    for user in users:
        output += '<li>%s (%s)</li>' % (user.name, user.email)
    output += '</ul>'
    return output

if __name__ == '__main__':
    app.run()
中间件支持

Weblyi支持中间件,可以用来实现一些通用的功能,例如身份验证和请求处理等。

以下示例代码展示了一个记录请求时间的中间件:

from weblyi import Weblyi

app = Weblyi()

class TimingMiddleware:
    def __init__(self, app):
        self.app = app

    def __call__(self, environ, start_response):
        import time
        start = time.time()

        def custom_start_response(status, headers, *args, **kwargs):
            duration = time.time() - start
            headers.append(('X-Response-Time', str(duration)))
            return start_response(status, headers, *args, **kwargs)

        return self.app(environ, custom_start_response)

app.wsgi_app = TimingMiddleware(app.wsgi_app)

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

if __name__ == '__main__':
    app.run()
错误处理

Weblyi提供了默认的错误处理功能,可以捕获并处理请求过程中发生的错误。以下是一个错误处理的简单示例:

from weblyi import Weblyi

app = Weblyi()

@app.route('/')
def index():
    raise Exception('Something went wrong!')

@app.errorhandler(500)
def server_error(error):
    return 'Internal server error', 500

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

在该示例中,如果在请求处理的过程中出现了异常,Weblyi将捕获此异常并调用server_error()函数返回错误代码500和自定义的错误消息“Internal server error”作为响应。