一. Forgerypy
二. 分页
一. Forgerypy
如果开发中需要大量逼真数据, 可以使用此工具批量制造.
- 工具名: ForgeryPy
-
pypi
https://pypi.org/project/ForgeryPy3/
https://pypi.org/project/ForgeryPy/ -
安装
python3
pip install ForgeryPy3
python2
pip install ForgeryPy
- 使用
python2, python3
- 例1 生成数据的例子
\#导入模块
import forgery_py
#地理信息(城市)
city=forgery_py.address.city()
print city
#随机颜色
color=forgery_py.basic.hex_color()
print color
#时间
data=forgery_py.date.date(True)
print data
#电子邮箱
email=forgery_py.internet.email_address()
print email
#姓名
name=forgery_py.name.full_name()
print name
#公司
company=forgery_py.name.company_name()
print company
#简介
about=forgery_py.lorem_ipsum.sentence()
- 例2 小应用
from app.models import User, Role, Post, Comment
from forgery_py import basic, lorem_ipsum, name, internet, date
@manager.command # 生成虚拟的用户数据
def forged():
from forgery_py import basic, lorem_ipsum, name, internet, date
from random import randint
db.drop_all()
db.create_all() # 删除数据库中的数据
Role.seed()
guests = Role.query.first()
def generate_comment(func_author, func_post): # 生成虚拟的评论
return Comment(body=lorem_ipsum.paragraphs(),
created=date.date(past=True),
author=func_author(),
post=func_post())
def generate_post(func_author): # 生成虚拟的文章
return Post(title=lorem_ipsum.title(),
body=lorem_ipsum.paragraphs(),
created=date.date(),
author=func_author())
def generate_user(): # 生成虚拟的用户
return User(name=internet.user_name(),
email=internet.email_address(),
password='password',
roles=guests)
users = [generate_user() for i in range(0, 5)]
db.session.add_all(users)
random_user = lambda: users[randint(0, 4)]
posts = [generate_post(random_user) for i in range(0, randint(50, 200))]
db.session.add_all(posts)
random_post = lambda: posts[randint(0, len(posts) - 1)]
comments = [generate_comment(random_user, random_post) for i in range(0, randint(2, 100))] # 再整点随机的评论,
db.session.add_all(comments) # 提交评论
db.session.commit() # 提交所有的数据
执行 python manage forged 即可 批量生成所需数据
二. 分页
flask 提供了分页, 在前台可以选择用bootstrap渲染, 有点丑, 但是也记录一下吧.
比如对文章列表进行分页
- 视图中:
@main.route('/')
def index():
page_index = request.args.get('page', 1, type=int)
query = Post.query.order_by(Post.created.desc())
pagination = query.paginate(page_index, per_page=20, error_out=False)
posts = pagination.items #返回当前page的所有数据
return render_template('index.html', title='欢迎来到主页', posts=posts, pagination=pagination)
- 模板中:
{% for post in posts %}
<h2><a href="{{ url_for('main.post', id = post.id) }}">{{ post.title }}</a></h2>
<div>
{{ post.body_html|safe }}
</div>
{% endfor %}
{% from "bootstrap/pagination.html" import render_pagination %}
{% if pagination %}
{{ render_pagination(pagination) }}
{% endif %}
页面上: