• Stars
    star
    234
  • Rank 170,690 (Top 4 %)
  • Language
    Python
  • License
    Do What The F*ck ...
  • Created over 9 years ago
  • Updated about 6 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Tornado project generator. Start a project with tornado, mako/jinjia2 and sqlalchemy/peewee in a minute.

fpage

Travis Code Climate

FPage 是一个传统的(即前后端分离之前)tornado项目生成器(CLI)。

能够自动创建基于 tornado + mako/jinja2 + peewee/sqlalchemy 的项目。

实例可参考 StoryNote MyCTF 等项目。

English

使用

通过 pip:

pip install fpage

fpage new [项目名]

或者

clone后直接使用:

python fpage.py new [项目名]

接下来按照向导走,首先输入项目名。

然后选择一个模板引擎(Mako/Jinja2/Tornado)

其次是ORM选择(Peewee/SQLChemy)

最后输入 y 确认

生成的目录就是你需要的,你可以试一下 python app.py 来运行他,然后访问 http://127.0.0.1:9000 来查看效果

实例:

# 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

    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)

    @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 默认,已做好配置

    <body>
        ${self.body()}
        <%block name="script"/>
    </body>
    <body>
        {% block body %}{% endblock %}
        {% block script %}{% endblock %}
    </body>
  • 模板预定义模板变量:req static url_for csrf_token/xsrf_token
    req -> request object

      ${ req.current_user }

    static -> static file

      <script src="${ static('js/main.js') }"></script>
      <link rel="stylesheet" href="${ static('css/style.css') }">

    url_for -> url reverse

      <p><a href="${ url_for('jump') }">Jump Page</a></p>
      <p><a href="${ url_for('about') }">About Page</a></p>

    csrf_token -> self.xsrf_form_html()

      <form method="post" class="am-form">
          ${csrf_token}
      </form>
  • 集成 sqlalchemy/peewee 支持(二选一)
    config

    DATABASE_URI = "sqlite:///database.db"

    sqlalchemy

    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

    from peewee import *
    from model import BaseModel
    
    
    class Test(BaseModel):
        test = TextField()
  • 集成消息闪现功能(类似 django 中 messages 或 flask 中 flash)
    view

    @route('/jump_test', name='jump')
    class Jump(View):
        def get(self):
            self.messages.error('Message Test: Error!!')
            self.redirect(url_for('about'))

    template

    % for msg in get_messages():
        % if msg.tag == 'success':
            <div class="ui-green">
                ${msg.txt}
            </div>
        % elif msg.tag == 'error':
            <div class="ui-red">
                ${msg.txt}
            </div>
        % endif
    % endfor
  • 自动生成页面标题

    例如:config.TITLE = 'FPage'

    渲染模板时写入参数 page_title

    self.render(page_title=page_title('测试板块', '社区')

    于是此页面网页标题就是:测试板块 » 社区 » FPage

  • 内置分页工具

    model.pagination_peewee / model.pagination_sqlalchemy

    参数大致如此:

    def pagination(count_all, query, page_size, cur_page=1, nearby=2):
        pass

    输出大致如此:

    {
        'cur_page': cur_page,
        'prev_page': prev_page,
        'next_page': next_page,
    
        'first_page': first_page,
        'last_page': last_page,
    
        'page_numbers': list(items),
        'page_count': page_count,
    
        'items': [...],
        'info': {
            'page_size': page_size,
            'count_all': count_all,
        }
    }

更新

ver 1.2 update 2017.09.04

  • 加入了分页工具

  • 加入 pypi 软件源(早该如此……)

ver 1.2alpha update 2016

  • 现在 config 也作为模板中的一个预定义变量

  • 加入新的 View 基类: AjaxLoginView

  • 新的辅助函数:page_title,用来自定义标题

  • peewee 的 BaseModel 加入了几个工具函数:to_dict(转为字典)、get_by_pk(根据主键取项,无则返回None)、exists_by_pk(根据主键判断是否存在)

  • 修正了“记住密码”选项无效的问题

  • 用户注册增加了“再次输入密码”的校验

  • 登录和注册增加了参数 next,用来指定操作完成后跳转的url

  • 加入了自动测试

ver 1.1 update 2015.9.20

  • 加入了用户模块

  • 加入了与用户相关的两个View基类:LoginView(登陆后可访问) 和 NoLoginView(非登陆可访问)

  • 加入了一个不检查 xsrf 的基类 AjaxView

  • 默认 ORM 切换为 peewee

  • 一些小的修正

TODO-LIST

  • 不再增加新功能,一个时代已经落幕

More Repositories

1

Icarus

🕊️ An opensource community/forum project write with python3 aiohttp and vue.js. 一个开源的社区程序,临时测试站:https://t.myrpg.cn
Vue
658
star
2

EasySelect

爬虫工具:一个Chrome插件,让你根据页面元素快速获取可读可维护的 CSS 选择器。 A chrome extension, let you get readable & maintainable css selector from elements.
JavaScript
93
star
3

tinyre

A light fork of python's regex engine (but slow, ~3k lines).
C
78
star
4

python_lite

[WIP] A simple, lightweight implementation of python3 language.
C
77
star
5

slim

[WIP] web framework provides instant restful api for sql table.
Python
43
star
6

unity-tskit

Unity JavaScript脚手架,使用puerts,集成FairyGUI并预置一个脚本框架
C#
29
star
7

myctf

A ctf competition program.
Python
27
star
8

miniblink-go-example

借助 cgo 对 miniblink 进行绑定
JavaScript
23
star
9

simple_avatar

Use first character to generate avatar.
Python
20
star
10

fairygui-puerts-unity

fairygui插件,用于在unity+puerts场景接入fairygui
JavaScript
20
star
11

nuxt-example-project-like-vue-cli3

Vue
13
star
12

godot-doc-cn

godot 中文文档
Python
12
star
13

miniblink-simple-demo

使用miniblink中各种常见需求的单文件demo,例如创建窗口,JS/CPP互调,无边框窗口拖动,根据exe文件图标设置窗口图标,最大化/最小化,获取窗口句柄,只允许单实例等等
C++
10
star
14

chat

A chatroom with tornado
HTML
8
star
15

storynote

simple markdown blog made by tornado and vue.js demo: http://fy0.me
Python
7
star
16

pycrud

A common crud framework for web.
Python
5
star
17

syncopy

Sync files from directory src to directory dest, skip same files and preserve all timestamps.
Go
5
star
18

XGPush-SDK-fy

腾讯信鸽(Xinge)推送 SDK 修改版,支持了py3,使用ujson代替json,requests代替httplib和urllib
Python
4
star
19

tornado-sphinx

Show search results for sphinx2.
Python
3
star
20

web-toolbox

3
star
21

IMGFont

使用 lua 脚本来控制参数的字库生成工具,字体部分基于 freetype。
C
3
star
22

ctftools

Python
2
star
23

fjnu-scs-navipages

-
2
star
24

qiniu-lite

一个轻量级的七牛SDK. A lightweight Qiniu Python SDK.
Python
2
star
25

my-object-id

A simple module for generate Mongodb ObjectID. Written in python.
Python
2
star
26

a5ime

IME support for Allegro 5.
C++
1
star
27

baidu-push

百度云推送 API
Python
1
star
28

compact_string

Flexible String Implementation for C99 (fixed-length coding)
C
1
star
29

socks5-tool

A very simple socks5 server tool
Go
1
star