Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
/fpagePublic

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

License

NotificationsYou must be signed in to change notification settings

fy0/fpage

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

67 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TravisCode Climate

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

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

实例可参考StoryNoteMyCTF 等项目。

English

使用

通过 pip:

pip install fpagefpage 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_projectProject Name (test_project):Template Engine [M/J/T]:Database ORM [P/S]:   Project Name: test_projectTemplate Engine: mako   Database ORM: peeweeSure (Y/n)?Complete.To get started:cd test_project    python app.pyServed 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

    fromviewimportroute,url_for,View@route('/')classIndex(View):defget(self):self.render()defpost(self):pass@route('/about',name='about')classAbout(View):defget(self):self.render()
  • 简单 session 支持(基于 secure cookie)

    @route('/')classIndex(View):defget(self):self.session['test']='session test 1'delself.session['test']self.session['test']='session test 2'self.render(s=self.session['test'])
  • 可选择模板引擎 mako 或 jinjia2 或 tornado 默认,已做好配置

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

    ${ req.current_user}

    static -> static file

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

    url_for -> url reverse

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

    csrf_token -> self.xsrf_form_html()

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

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

    sqlalchemy

    frommodelimportBaseModelfromsqlalchemyimportColumn,Integer,String,Float,ForeignKey,BooleanclassTest(BaseModel):__tablename__='test'id=Column(Integer,primary_key=True,autoincrement=True)test=Column(String)

    peewee

    frompeeweeimport*frommodelimportBaseModelclassTest(BaseModel):test=TextField()
  • 集成消息闪现功能(类似 django 中 messages 或 flask 中 flash)
    view

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

    template

    %for msgin get_messages():%if msg.tag=='success':        <divclass="ui-green">${msg.txt}        </div>%elif msg.tag=='error':        <divclass="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

    参数大致如此:

    defpagination(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

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

About

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

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

[8]ページ先頭

©2009-2025 Movatter.jp