📜  顺风 nowrap (1)

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

顺风

image

简介

顺风(ShunFeng)是一款使用 Python 编写的轻量级 Web 框架,旨在提供简洁易用的开发体验。它基于 WSGI 协议,支持 Python 3.x 版本。顺风的特点是易学易用,代码清晰简单,适合初学者或快速开发小项目。另外,它还提供了强大的扩展机制,方便用户进行功能扩展。最后,顺风采用了 MIT 协议开源,用户可以自由使用、修改、分发本软件。

安装

使用 pip 命令可以很方便地安装顺风框架:

pip install shunfeng
快速开始

定义一个简单的网页程序只需几行代码,例如:

from shunfeng import ShunFeng, Response

app = ShunFeng()

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

app.run()

以上代码创建了一个简单的 Web 程序,它会监听本地地址的 8000 端口,可以通过浏览器访问 http://localhost:8000/ 以查看结果。其中 / 是路由,用于指定程序应该做出何种响应。index 函数为视图函数,它返回一个字符串类型,用于给用户提供内容。

路由

路由用于将 URL 和函数调用进行关联。在顺风框架中,可以通过装饰器来定义路由:

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

该装饰器将 /hello 路由与 hello 函数进行绑定,HTTP GET 方式请求该路由时,程序将运行 hello 函数并返回结果。

在路由中,使用变量时可以使用尖括号 <variable> 来指定,例如:

@app.route('/user/<username>')
def user(username):
    return Response('Hello, %s!' % username)

在以上例子中,<username> 指定了一个变量,当请求 /user/john 时,解释器将调用 user 函数并将 john 作为参数传入。

模板引擎

顺风框架内置了 Jinja2 模板引擎,用户可以定义模板文件并通过顺风框架渲染。在视图函数中使用 render_template 函数即可实现:

from shunfeng import ShunFeng, render_template

app = ShunFeng()

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

app.run()

在这个例子中,框架会在 templates 目录下查找名为 hello.html 的模板文件并渲染,同时将参数 name 赋值为 'John'。模板中可以通过变量使用 {{ name }} 表达式来展示参数值。使用条件语句、循环语句等功能可以丰富模板。

数据库

应用程序通常需要使用数据库存储和管理数据。顺风框架提供了相应的支持,可以通过 SQLAlchemy 等库来实现。例如:

from shunfeng import ShunFeng
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

app = ShunFeng()
engine = create_engine('mysql+pymysql://username:password@hostname:port/database')
Session = sessionmaker(bind=engine)
Base = declarative_base()

class User(Base):
    __tablename__ = 'user'

    id = Column(Integer, primary_key=True)
    name = Column(String(20))
    age = Column(Integer)

    def __repr__(self):
        return '<User %r>' % self.name

@app.route('/user')
def get_users():
    session = Session()
    users = session.query(User).all()
    return render_template('users.html', users=users)

app.run()

在这个例子中,使用 create_engine 函数创建了一个 MySQL 数据库引擎,并定义了一个名为 User 的 ORM 模型。在访问 /user 路由时,程序会查询所有用户数据并渲染 users.html 模板文件。用户数据由 users 参数传递,并在模板中渲染。可以使用类似 User.query.filter_by() 等 SQLAlchemy 语法来实现更丰富的数据库操作。

扩展

顺风框架拥有强大的扩展机制,用户可以通过编写插件来提供框架功能。例如,以下是一个用于记录请求日志的插件:

import logging

class LoggerPlugin:

    def __init__(self):
        logging.basicConfig(filename='app.log', level=logging.INFO)

    def before_request(self, request):
        logging.info('Request: %s %s' % (request.method, request.path))

    def after_request(self, response):
        return response

plugin = LoggerPlugin()

在顺风框架应用程序中使用该插件只需要在创建实例时将该插件实例传入即可:

app = ShunFeng(plugins=[plugin])

以上代码创建了一个记录请求日志的插件,其中 before_request 方法用于在请求之前记录请求信息,after_request 方法用于在请求完成后返回响应。可以通过编写自定义插件来丰富应用程序的功能。

结语

顺风框架是一个轻量级的 Python Web 框架,支持简洁易用的开发模式。它包含路由、模板引擎、数据库等常用功能,并支持编写自定义插件以提供更多的功能。它是一个适用于小型应用程序或入门门槛较低的新手友好框架。