- Notifications
You must be signed in to change notification settings - Fork43
Tornado project generator. Start a project with tornado, mako/jinjia2 and sqlalchemy/peewee in a minute.
License
fy0/fpage
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
FPage 是一个传统的(即前后端分离之前)tornado项目生成器(CLI)。
能够自动创建基于 tornado + mako/jinja2 + peewee/sqlalchemy 的项目。
通过 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 支持(二选一)
configDATABASE_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, }}
加入了分页工具
加入 pypi 软件源(早该如此……)
现在 config 也作为模板中的一个预定义变量
加入新的 View 基类: AjaxLoginView
新的辅助函数:page_title,用来自定义标题
peewee 的 BaseModel 加入了几个工具函数:to_dict(转为字典)、get_by_pk(根据主键取项,无则返回None)、exists_by_pk(根据主键判断是否存在)
修正了“记住密码”选项无效的问题
用户注册增加了“再次输入密码”的校验
登录和注册增加了参数 next,用来指定操作完成后跳转的url
加入了自动测试
加入了用户模块
加入了与用户相关的两个View基类:LoginView(登陆后可访问) 和 NoLoginView(非登陆可访问)
加入了一个不检查 xsrf 的基类 AjaxView
默认 ORM 切换为 peewee
一些小的修正
- 不再增加新功能,一个时代已经落幕
About
Tornado project generator. Start a project with tornado, mako/jinjia2 and sqlalchemy/peewee in a minute.