Quantcast
Channel: 看得透又看得远者prevail.ppt.cc/flUmLx ppt.cc/fqtgqx ppt.cc/fZsXUx ppt.cc/fhWnZx ppt.cc/fnrkVx ppt.cc/f2CBVx
Viewing all articles
Browse latest Browse all 20480

tornado项目生成器-fpage

$
0
0

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

TravisCode Climate
FPage 是一个传统的(即前后端分离之前)tornado项目生成器(CLI)。
能够自动创建基于 tornado + mako/jinja2 + peewee/sqlalchemy 的项目。
实例可参考 StoryNoteMyCTF等项目。
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('/')
    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
    from model import BaseModel
    from sqlalchemy import Column, Integer, String, Float, ForeignKey, Boolean


    classTest(BaseModel):
    __tablename__ ='test'
    id= Column(Integer, primary_key=True, autoincrement=True)
    test = Column(String)
    peewee
    from peewee import*
    from model import BaseModel


    classTest(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 msg in 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,
    }
    }
     
    FROM  https://github.com/fy0/fpage

Viewing all articles
Browse latest Browse all 20480

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>