# fpage **Repository Path**: gusong125/fpage ## Basic Information - **Project Name**: fpage - **Description**: FPage 是一个tornado项目生成器,能够帮你生成基于 tornado + mako/jinja2 + sqlalchemy/peewee 的项目,节省时间。从https://github.com/fy0/fpage镜像 - **Primary Language**: Python - **License**: WTFPL - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 19 - **Created**: 2024-12-19 - **Last Updated**: 2024-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # fpage [](https://travis-ci.org/fy0/fpage) [](https://codeclimate.com/github/fy0/fpage) FPage 是一个传统的(即前后端分离之前)tornado项目生成器(CLI)。 能够自动创建基于 tornado + mako/jinja2 + peewee/sqlalchemy 的项目。 实例可参考 [StoryNote](https://github.com/fy0/storynote) [MyCTF](https://github.com/fy0/myctf) 等项目。 [English](README_EN.md) ## 使用 通过 pip: ```bash pip install fpage fpage new [项目名] ``` 或者 clone后直接使用: ```bash python fpage.py new [项目名] ``` 接下来按照向导走,首先输入项目名。 然后选择一个模板引擎(**M**ako/**J**inja2/**T**ornado) 其次是ORM选择(**P**eewee/**S**QLChemy) 最后输入 y 确认 生成的目录就是你需要的,你可以试一下 python app.py 来运行他,然后访问 http://127.0.0.1:9000 来查看效果 实例: ```bash # fpage new test_project Project Name (test_project): Template Engine [M/J/T]: Database ORM [P/S]: Project Name: test_project Template Engine: mako Database ORM: peewee Sure (Y/n)? Complete. To get started: cd test_project python app.py Served at http://localhost:9000 ``` ## 特性 * 基于 tornado * MVT 架构(Model, View, Template) * 兼容 python 3 & python 2 * 合理的安全性支持 (secure cookie, xsrf) * 支持 flask 风格的 url 路由装饰器 @route * 简单 session 支持(基于 secure cookie) * 可选择模板引擎 mako 或 jinjia2 或 tornado 默认,已做好配置 * 模板预定义模板变量:req static url_for csrf_token/xsrf_token config * 集成 sqlalchemy/peewee 支持(二选一) * 集成消息闪现功能(类似 django 中 messages 或 flask 中 flash) * 集成简单的用户系统 * 自动生成页面标题 * 可选的 Peewee 序列化扩展组件 * 内置分页工具 ## 目录结构 * model 数据库交互 * view 逻辑 * templates 模板目录 * lib 存放一些全局使用的工具类 ## 特性说明 * **支持 flask 风格的 url 装饰器 @route** ```python from view import route, url_for, View @route('/') class Index(View): def get(self): self.render() def post(self): pass @route('/about', name='about') class About(View): def get(self): self.render() ``` * **简单 session 支持(基于 secure cookie)** ```python @route('/') class Index(View): def get(self): self.session['test'] = 'session test 1' del self.session['test'] self.session['test'] = 'session test 2' self.render(s=self.session['test']) ``` * **可选择模板引擎 mako 或 jinjia2 或 tornado 默认,已做好配置** ```mako
${self.body()} <%block name="script"/> ``` ```jinja {% block body %}{% endblock %} {% block script %}{% endblock %} ``` * **模板预定义模板变量:req static url_for csrf_token/xsrf_token** req -> request object ```mako ${ req.current_user } ``` static -> static file ```mako ``` url_for -> url reverse ```mako ``` csrf_token -> self.xsrf_form_html() ```mako ``` * **集成 sqlalchemy/peewee 支持(二选一)** config ```python DATABASE_URI = "sqlite:///database.db" ``` sqlalchemy ```python from model import BaseModel from sqlalchemy import Column, Integer, String, Float, ForeignKey, Boolean class Test(BaseModel): __tablename__ = 'test' id = Column(Integer, primary_key=True, autoincrement=True) test = Column(String) ``` peewee ```python from peewee import * from model import BaseModel class Test(BaseModel): test = TextField() ``` * **集成消息闪现功能(类似 django 中 messages 或 flask 中 flash)** view ```python @route('/jump_test', name='jump') class Jump(View): def get(self): self.messages.error('Message Test: Error!!') self.redirect(url_for('about')) ``` template ```mako % for msg in get_messages(): % if msg.tag == 'success':