2

系统概要说明  

该网站采用python+flask+mysql的web建设技术,用户可以发表问答的评论,以及对问答的一些点赞和收藏功能,可以根据用户的关键字搜索文章,向用户推荐相似文章等。 

 

注册页面:用户注册,储存在数据库,然后用户进行注册验证;

登录:用户注册完后,进入网站;

注销:将网页注册帐号的正常状态转为未登录状态,多个用户时,也可以退出这个用户,转入另一个用户,也泛指删除与取消用户与帐号的激活状态;

用户发布功能:用户可以发表自己看法和建议,问答存储到数据库中;

详情页:详情页中具有评论及推荐文章功能,用户可对新闻进行评论发表还可对文章进行点赞及收藏,此操作过程存入数据库,以用户id、新闻id作为外键;网站还根据用户感兴趣的新闻推荐相似类型的新闻文章。

个人中心:根据用户的活跃度,呈现用户发布的新闻,评论文章,收藏文章以及点赞。

搜索:可以根据用户输入关键词进行模糊搜索,同时也可以条件组合搜索。

 

 

 

 

2.网站结构设计

python是一种面向对象的解释型计算机程序设计语言,具有丰富和强大的库,它有高效率的高层数据结构,能简单而有效地实现面向对象编程。Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使得它在大多数平台上的很多领域都是一个理想的脚本语言,特别适用于快速的应用程序开发。

Flask,是一个使用 Python 编写的轻量级 Web 应用框架,使用简单的核心,用 extension 增加其他功能。

Mysql,是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内。这三者相结合的web建设技术,我在这其中感受到了代码奇特的魅力。虽然有课本,但是仅仅掌握课本知识并不足以完成,还需要多多上机操作,熟悉代码运用在哪里,得出相对应的功能,基本功能都能准确无误的给予数据支持。在此次建站过程中,前端界面采用的是html、css、JavaScript,后端采用python作为支持。

  3.模块详细设计

 

 

 

 

  3.数据库设计

根据数据库规范的设计方法,把数据库的设计分为以下六个阶段:①.需求分析阶段 .②慨念结构设计 ③.逻辑结构设计 ④物理结构设计 ⑤数据库实施  ⑥.数据库的运行和维护

共有5张表:

 

 

 

 4.系统实现的关键算法与数据结构

评论,收藏,点赞:

复制代码
class Comment(db.Model):   # 评论
    __tablename__ = 'comment'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    fabu_id = db.Column(db.Integer, db.ForeignKey('fabu.id'))
    creat_time = db.Column(db.DateTime, default=datetime.now)
    detail = db.Column(db.Text, nullable=False)
    fabu = db.relationship('Fabu',
                           backref=db.backref('comments', order_by=creat_time.desc))  # order_by=creat_time.desc按时间降序
    author = db.relationship('User', backref=db.backref('comments'))
 
 
class Shoucang(db.Model):   # 收藏
    __tablename__ = 'shoucang'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    fabu_id = db.Column(db.Integer, db.ForeignKey('fabu.id'))
    fabu = db.relationship('Fabu', backref=db.backref('shoucangs'))
    author = db.relationship('User', backref=db.backref('shoucangs'))
 
 
class Dianzang(db.Model):   # 点赞
    __tablename__ = 'dianzang'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    fabu_id = db.Column(db.Integer, db.ForeignKey('fabu.id'))
    fabu = db.relationship('Fabu', backref=db.backref('dianzangs'))
    author = db.relationship('User', backref=db.backref('dianzangs'))
复制代码
复制代码
# 跳转首页搜索
@app.route('/search/') def search(): sousuo = request.args.get('sousuo') # args获取关键字,区别form author = User.query.all() ydfabu = Fabu.query.filter(Fabu.yuedu > 5).all() fabus = Fabu.query.filter( or_( # 两种查询条件 Fabu.title.contains(sousuo), # contains模糊查 Fabu.detail.contains(sousuo) ) ).order_by('-creat_time') return render_template('daohang.html', fabus=fabus, author=author, ydfabu=ydfabu) # fabus要和原首页数据模型一样 # 跳转高级分类查询 @app.route('/fenlei/') def fenlei(): fenlei = request.args.get('fenlei') # args获取关键字,区别form author = User.query.all() ydfabu = Fabu.query.filter(Fabu.yuedu > 5).all() fenlei_fabus = Fabu.query.filter( or_( # 两种查询条件 # Fabu.title.contains(fenlei), # contains模糊查 Fabu.leixing.contains(fenlei), # Fabu.creat_time.contains(fenlei) ) ).order_by('-creat_time') return render_template('daohang.html', fabus=fenlei_fabus, author=author, ydfabu=ydfabu) # fabus要和原首页数据模型一样
复制代码

 

    上传头像:

复制代码
#上传头像
@app.route('/uploadLogo/<user_id>', methods=['GET', 'POST'])
def uploadLogo(user_id):
    user = User.query.filter(User.id == user_id).first()
    f = request.files['logo']
    basepath = os.path.dirname(__file__)  # 当前文件所在路径
    upload_path = os.path.join(basepath, 'static/img', f.filename)  # 注意:没有的文件夹一定要先创建,不然会提示没有该路径
    f.save(upload_path)
    user.img = 'img/' + f.filename
    db.session.commit()
    return redirect(url_for('yonghu', username_id=user_id,tag=1));
 
复制代码

跳转登录:

复制代码
# 跳转登录
@app.route('/denglu/', methods=['GET', 'POST'])  # methods定义它有两种请求方式
def denglu():
    if request.method == 'GET':
        return render_template('denglu.html')
    else:
        username = request.form.get('user')  # post请求模式,安排对象接收数据
        password = request.form.get('pass')
        user = User.query.filter(User.username == username).first()  # 作查询,并判断
        if user:  # 判断用户名
            if user.check_password(password):  # 判断密码
                session['user'] = username  # 利用session添加传回来的值username
                session['user_id'] = user.id
                session.permanent = True  # 设置session过期的时间
                return redirect(url_for('daohang'))
            else:
                return u'用户密码错误'
        else:
            return u'用户不存在,请先注册'
复制代码

跳转首页:

复制代码
@app.route('/')
def daohang():
    pl = request.args.get('pl')   # 接收顺序排列的关键词,接收不到就按时间排列
    if pl == '按热度':
        context = {
            'fabus': Fabu.query.order_by('-yuedu').all(),
            'author': User.query.all(),
            'ydfabu': Fabu.query.filter(Fabu.yuedu > 5).all()  # 当发布的文章阅读量大于多少时取出这些文章,显示在首页的推荐文章
            # order_by('-creat_time')按时间降序排列,Fabu.query.all()查出了Fabu类的所有元组
        }
        return render_template('daohang.html', **context)
    else:
        context = {
            'fabus': Fabu.query.order_by('-creat_time').all(),
            'author': User.query.all(),
            'ydfabu': Fabu.query.filter(Fabu.yuedu > 5).all()  # 当发布的文章阅读量大于多少时取出这些文章,显示在首页的推荐文章
            # order_by('-creat_time')按时间降序排列,Fabu.query.all()查出了Fabu类的所有元组
        }
        return render_template('daohang.html', **context)
 
复制代码
复制代码
# 插入功能
user = User(username='15',password='12')
db.session.add(user)
db.session.commit()
 
# 查询功能
user=User.query.filter(User.username=="15").first()
print(user.username,user.password)
 
# 修改功能
user=User.query.filter(User.username=="15").first()
user.password='888'
db.session.commit()
 
# 删除功能
user=User.query.filter(User.username=="15").first()
db.session.delete(user)
db.session.commit()
复制代码

 

 

 5.成品展示:

 

 

 

 

 

 

 

 

posted @ 2018-06-16 20:58  037吴宜珊  阅读(244)  评论(0编辑  收藏  举报