课程设计

Posted wuyishan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了课程设计相关的知识,希望对你有一定的参考价值。

  1. 系统概要说明  

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

 

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

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

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

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

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

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

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

 

 

 

 

2.网站结构设计

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

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

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

技术分享图片

 

技术分享图片

技术分享图片

 

 技术分享图片

技术分享图片

 

 技术分享图片

 


以上是关于课程设计的主要内容,如果未能解决你的问题,请参考以下文章

20155234 2017-2018-1《信息安全系统设计基础》课程总结

片段中的 super.onCreateView

css 粘性页脚片段(来源:treehouse flexbox课程)

设计模式之单例模式

课程设计必备之数据库操作代码模板

是否有在单个活动中处理多个片段的 Android 设计模式?