博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
管理信息系统 课程设计
阅读量:5075 次
发布时间:2019-06-12

本文共 5624 字,大约阅读时间需要 18 分钟。

一、系统概要说明

      本次继续沿用Python+Flask+MysqL的web建设技术,开发一个网站,这次选择了一个主题,为新闻,新闻为主要的一个大板块,细则分国际、法制以及军事。在这次课程设计中,对于用flask的建设有了更深的了解,比如在利用flask上传文件的时候,只需要利用 request 的files属性即可,这也是一个字典,包含了被上传的文件。如果想获取上传的文件名,可以使用filename属性,不过需要注意这个属性可以被客户端更改,所以并不可靠。更好的办法是利用werkzeug提供的secure_filename方法来获取安全的文件名。可以说Flask框架的核心就是Werkzeug和Jinja2。Python最出名的框架要数Django,此外还有Flask、Tornado等框架。虽然Flask不是最出名的框架,但是Flask应该算是最灵活的框架之一,这也是Flask受到广大开发者喜爱的原因。

二、网站结构设计

       设计结构图:

三、模块详细设计

            这次大部分继续沿用上学期的设计结构,进行了小部分的修改,比如,在所有文章当中,分为显示所有的文章,以及各类具体的文章,对于用户的喜爱可以直接选择自己需要的文章。在点进去文章详情里面,可以看到文章的详细内容,评论列表,并且可以对文章进行评论或者点赞。在发布帖子中,增加了可以具体对哪一类型进行发布。个人中心里面显示了个人中心的信息,我发布过的文章标题,以及我的收藏,个人中心可以进行修改密码以及个人信息。

四、数据库设计

  

五、系统实现的关键算法与数据结构

# 所有文章@bp.route('/index/',methods=['GET','POST'])def index():     board_id = request.args.get('bd',type=int,default=None)     page = request.args.get(get_page_parameter(),type=int, default=1)     boards = BoardModel.query.all()     start =(page-1)*config.PER_PAGE     end = start + config.PER_PAGE     posts=None     total = 0     query_obj=PostModel.query.order_by(PostModel.create_time.desc())     if board_id:         query_obj = query_obj.filter_by(board_id=board_id)         posts = query_obj.slice(start,end)         total = query_obj.count()     else:         posts = query_obj.slice(start,end)         total = query_obj.count()     pagination = Pagination(bs_version=3,page=page,total=total,outer_window=0,inner_window=2)     context={         'boards': boards,         'posts':posts,         'pagination':pagination,         'current_board':board_id     }     return render_template('front/front_index.html',**context)
#搜索功能@bp.route('/search/')def search():    qu = request.args.get('q')    ques = PostModel.query.filter(        and_(            PostModel.title.contains(qu)        )    ).order_by('-create_time')    board_id = request.args.get('bd', type=int, default=None)    page = request.args.get(get_page_parameter(), type=int, default=1)    boards = BoardModel.query.all()    start = (page - 1) * config.PER_PAGE    end = start + config.PER_PAGE    total = 0    query_obj = PostModel.query.order_by(PostModel.create_time.desc())    if board_id:        query_obj = query_obj.filter_by(board_id=board_id)        posts = query_obj.slice(start, end)        total = query_obj.count()    else:        posts = query_obj.slice(start, end)        total = query_obj.count()    pagination = Pagination(bs_version=3, page=page, total=total, outer_window=0, inner_window=2)    context = {        'boards': boards,        'posts': ques,        'pagination': pagination,        'current_board': board_id    }    return render_template('front/front_index.html',**context)
#个人中心@bp.route('/usercenter/
/
')@login_requireddef usercenter(user_id,tag): user = FrontUser.query.filter(FrontUser.id==user_id).first() posts = PostModel.query.filter(PostModel.author_id == user_id).all() context = { 'user':user, 'posts':posts } if tag == '1': return render_template('front/front_usercenter.html',**context) if tag == '2': return render_template('front/front_user_apost.html',**context)
#点赞功能@bp.route('/dianzan/',methods=['GET','POST'])@login_requireddef dianzan():    user_id=g.front_user.id    post_id=request.form.get('post_id')    dianzan=DianzanModel(user_id=user_id,post_id=post_id)    db.session.add(dianzan)    db.session.commit()    return redirect(url_for('front.post_detail',post_id=post_id))
#用户上传头像@bp.route('/avatar/
',methods=['POST'])@login_requireddef updata_acatar(user_id): user = FrontUser.query.filter(FrontUser.id == user_id).first() f = request.files['img'] basepath = os.path.dirname(__file__) # 当前文件所在路径 upload_path = os.path.join('E:/News/static/img', f.filename) # 注意:没有的文件夹一定要先创建,不然会提示没有该路径 f.save(upload_path) user.avatar = 'img/' + f.filename db.session.commit() return redirect(url_for('front.usercenter',user_id=user.id,tag=1))
#用户修改个人信息@bp.route('/user_updata/
',methods=['GET','POST'])@login_requireddef user_updata(user_id): if request.method == 'GET': user= FrontUser.query.filter(FrontUser.id==user_id).first() return render_template('front/front_user_updata.html',user=user) else: form = UserupdataForm(request.form) if form.validate(): username = form.username.data realname = form.realname.data signature = request.form.get('signature') user = g.front_user user.username =username user.realname = realname user.signature = signature db.session.commit() return restful.success() else: return restful.params_error(form.get_error())
#用户修改密码@bp.route('/resetpwd/',methods=['GET','POST'])@login_requireddef resetpwd():    if request.method == 'GET':        return render_template('front/front_resetpwd.html')    else:        form = ResetpwdForm(request.form)        if form.validate():            oldpwd = form.oldpwd.data            newpwd = form.newpwd.data            user = g.front_user            if user.check_password(oldpwd):                user.password = newpwd                db.session.commit()                # {"code":200,message=""}                # return jsonify({"code":200,"message":""})                return restful.success()            else:                return restful.params_error("旧密码错误!")        else:            return restful.params_error(form.get_error())

六、成品展示

 

 

 

 

 

 

 

 

 

 

七、个人总结

      在这次课程设计中,虽然有了上学期的基础,但在增加功能部分仍有很大的困难,通过学习专业视频,更加熟悉了解了flask的结构等等,最终的成品虽然仍有不足,希望自己再接再厉,能做出更好的产品!

转载于:https://www.cnblogs.com/xiaojiaqi/p/9190651.html

你可能感兴趣的文章
org.w3c.dom(java dom)解析XML文档
查看>>
Docker容器安装weblogic详细教程
查看>>
PyCharm的HelloHorld
查看>>
选择合适的CA购买SSL证书
查看>>
微软职位内部推荐-Senior SDE
查看>>
阻塞队列
查看>>
Vue 恢复初始值的快速方法
查看>>
Asp.NetCore之组件写法
查看>>
springcloud之config配置中心-Finchley.SR2版
查看>>
清除过期日志的py脚本
查看>>
美国商业经济金融发展史
查看>>
vmware centos .net core sdk开发测试
查看>>
PHP程序守护进程化(转)
查看>>
赖床分子想改变--
查看>>
mongodb与sql语句对比
查看>>
js数组去重
查看>>
美好的一天从“真实”开始
查看>>
js 正则替换换行符
查看>>
sql server 中的简单查询案例
查看>>
Evaluate Reverse Polish Notation
查看>>