管理信息系统 课程设计

Posted xiaojiaqi

tags:

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

一、系统概要说明

      本次继续沿用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/<user_id>/<tag>)
@login_required
def 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_required
def 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/<user_id>,methods=[POST])
@login_required
def 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/<user_id>,methods=[GET,POST])
@login_required
def 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_required
def 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的结构等等,最终的成品虽然仍有不足,希望自己再接再厉,能做出更好的产品!

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

Python课程设计之学生信息管理系统

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

C语言课程设计"学生信息管理系统设计 "怎么做?

JAVA课程设计,设计一个学生基本信息管理系统,有没有大佬可以帮我,急!!!!

200分2天内求大学本科数据库课程设计!急!急!

用java图书销售管理系统的课程设计怎么做?