python web py入门(8)- 论坛的首页文章来源

我们知道论坛的首页,就是显示一些发表的文章标题和索引等等。而这些文章的标题又是从那里得来呢?其实它们是保存在数据库里,在我这里是使用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, 先做简单的返回,没有用户登录。

俄罗斯方块游戏开发
http://edu.csdn.net/course/detail/5110
boost库入门基础
http://edu.csdn.net/course/detail/5029
Arduino入门基础
http://edu.csdn.net/course/detail/4931
Unity5.x游戏基础入门
http://edu.csdn.net/course/detail/4810
TensorFlow API攻略
http://edu.csdn.net/course/detail/4495
TensorFlow入门基本教程
http://edu.csdn.net/course/detail/4369



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

caimouse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值