我们知道论坛的首页,就是显示一些发表的文章标题和索引等等。而这些文章的标题又是从那里得来呢?其实它们是保存在数据库里,在我这里是使用mysql数据库,因此是从mysql数据库里读取出来,所以要建立访问mysql的连接,这部分内容在前面的文章已经说过,如果不记起可以看看前面的文章。
最后的一段代码:
俄罗斯方块游戏开发
在这里,我们来了解model.py文件,在这个文件里来定义如下:
# 连接MySQL数据库
db = web.database(dbn=settings.DBN, host=settings.HOST, port=settings.PORT, db=settings.DB,
user=settings.MYSQL_USERNAME, pw=settings.MYSQL_PASSWORD, driver=settings.DRIVER)
这段代码就是创建db的数据库连接,但是这里的参数输入是采用settings模块文件进行定义了,不再是使用一些常量字符串。settings定义如下:
#python 3.6
#蔡军生
#http://blog.csdn.net/caimouse/article/details/51749579
#
SITE_NAME = '论坛'
AUTHOR = 'caijunsheng'
GLOBAL_PARAMS = {'site_name': SITE_NAME, 'title': SITE_NAME, 'author': AUTHOR}
##### 公共配置 #####
COOKIE_EXPIRES = 3600 # 单位s
IMG_DIR = '/static/img'
POSTS_PER_PAGE = 10 # 每页显示10篇文章
# 本地环境下的MySQL配置
DBN = 'mysql'
HOST = '127.0.0.1'
PORT = 3308
DRIVER = 'mysql.connector'
DB = 'forum'
MYSQL_USERNAME = 'root'
MYSQL_PASSWORD = '12345678'
##### email服务器配置 #####
import web
web.config.smtp_server = 'smtp.gmail.com'
web.config.smtp_port = 587
web.config.smtp_username = 'your_gmail_address'
web.config.smtp_password = 'your_gmail_password'
web.config.smtp_starttls = True
##### 调试模式 #####
web.config.debug = False
通过这些参数修改,就可以访问不同的配置的数据库,以及论坛的标题等等.
下一段代码:
class Post:
def count(self):
'''获取文章总数'''
return db.query("SELECT COUNT(*) AS count FROM posts")[0].count
def list(self, page):
'''获取第page页的所有文章'''
per_page = settings.POSTS_PER_PAGE
# 获取从offset开始共per_page个post
offset = (page - 1) * per_page
posts = db.query('''SELECT posts.id, title, posts.time, user_id, users.name AS username
FROM posts JOIN users
ON posts.user_id = users.id
ORDER BY posts.id DESC
LIMIT %d OFFSET %d''' % (per_page, offset))
page_posts = []
for p in posts:
comment = Comment(p.id)
last = comment.last()
last_time = last.time if last else p.time
page_posts.append({'id': p.id, 'title': p.title, 'userid': p.user_id, 'username': p.username, 'comment_count': comment.count(), 'last_time': last_time})
# 计算总页数
post_count = self.count()
page_count = post_count / per_page
if post_count % per_page > 0:
page_count += 1
return (page_posts, page_count)
在这里来定义类Post,创建两个函数count和list, count是从数据库计算发贴的数量,list是把发贴的标题、用户名称等生成一个列表,并计算总页数返回。
最后的一段代码:
class User:
def current_id(self):
'''当前登录用户的id'''
user_id = 0
return user_id
在这里定义用户对象User, 先做简单的返回,没有用户登录。