我们经常会看到,博客文章太多,我们分为很多页来显示,一个是美观,另外一个是这样对于页面的加载速度会优化很多
所以,这一章节就是学习这个内容,不过目前我们数据库里面用户只有没几个,要手动添加账户去添加博客文章太累了
所以写一个自动生成假用户的程序,用来生成假用户来发假文章,目的是看分页功能。
首先是安装一个库
(venv) $ pip install forgerypy
另外,由于这个库只是在开发环境中使用,所以,到这里我们要讲requirements.txt变成一个文件夹了
里面包含有各种不同环境下的版本需求txt文档
在这种版本需求的文件里面,我们同样可以使用引入功能
比如我们把各种环境下都需要用到的库的版本,写入common.txt的文件
而在入dev.txt这样的开发环境版本文件中,用以下代码来表示,引入common.txt文件,并添加其他库在开发环境下使用
-r common.txt
ForgeryPy==0.1
接下来就是修改models文件了
还是用到了静态方法,用来在不生成实例的情况下直接生成数据
class User(UserMixin,db.Model):
#...
@staticmethod
def generate_fake(count = 100):
from sqlalchemy.exc import IntegrityError
from random import seed
import forgery_py
seed()
for i in range(count):
u = User(email = forgery_py.internet.email_address(),
username = forgery_py.internet.user_name(True),
password = forgery_py.lorem_ipsum.word(),
confirmed = True,
name = forgery_py.name.full_name(),
location = forgery_py.address.city(),
about_me = forgery_py.lorem_ipsum.sentence(),
member_since = forgery_py.date.date(True))
db.session.add(u)
try:
db.session.commit()
except IntegrityError:
db.session.rollback()
里面看到了很多新的功能
1:从random模块里面导入的seed函数,这个函数叫作种子函数,什么意思呢,就是对于random函数,种下a种子(数字),那结出的果实(对应的随机数)总是固定的
这篇文章有比较详细的解说,可以参考
http://blog.csdn.net/qinglu000/article/details/46119621
2:forgery_py,相当于一个生成虚拟数据的模块,里面的功能就不深究了,看得懂就好
3:为什么会用到rollback回滚,因为,在生成虚拟用户时候,可能会发生email重复的情况,所以,碰到这个情况就需要回滚。
之后需要更新Post类
class Post(db.Model):
#...
@staticmethod
def generate_fake(count = 100):
from random import seed,randint
import forgery_py
seed()
user_count = User.query.count() #这行是查询一共有生成了多少虚拟用户
for i in range(count):
u = User.query.offset(randint(0,user_count-1)).first()
p = Post(body = forgery_py.lorem_ipsum.sentences(randint(1,3)),
timestamp = forgery_py.date.date(True),
author = u) #这一行,将用户和所发的文章绑定了起来
db.session.add(p)
db.session.commit()
上面的u = User.query.offset(randint(0,user_count-1)).first()这一行,我自己想了一下,还可以换个写法,如下
u = User.query.filter_by(id=randint(1,user_count)).first(),但是这个写法有一个问题,就是万一数据库当中有数据被删除过,当中的id是跳开的,就不能完全随机了。
记得还要在manage.py里面将shell命令更新一下Post
def make_shell_context():
return dict(app=app,db=db,User=User,Role=Role,Post=Post)
之后用shell命令就可以调用函数添加虚拟用户和文章了
(venv) $ python manage.py shell
>>> User.generate_fake(100)
>>> Post.generate_fake(100)
效果图如下,就已经生成了很多虚拟文章,虽然是看不懂的话
下面的图分别是生成的fake user和fake post的效果图