Flask Web 开发 博客文章_2

49 篇文章 2 订阅
41 篇文章 3 订阅

我们经常会看到,博客文章太多,我们分为很多页来显示,一个是美观,另外一个是这样对于页面的加载速度会优化很多

所以,这一章节就是学习这个内容,不过目前我们数据库里面用户只有没几个,要手动添加账户去添加博客文章太累了

所以写一个自动生成假用户的程序,用来生成假用户来发假文章,目的是看分页功能。


首先是安装一个库

(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的效果图







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值