课程设计
Posted wuyishan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了课程设计相关的知识,希望对你有一定的参考价值。
- 系统概要说明
该网站采用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.成品展示:
以上是关于课程设计的主要内容,如果未能解决你的问题,请参考以下文章
20155234 2017-2018-1《信息安全系统设计基础》课程总结