首页 > 其他 > 详细

管理信息系统 课程设计

时间:2018-06-16 14:16:50      阅读:253      评论:0      收藏:0      [点我收藏+]

 

操作说明:

  1. 系统概要说明
    1. 本课程设计很大的改进,学习了flask的新知识,更深入了解flask框架,Flask选择组件的额外工作给那些使用案例不适用标准ORM的开发者提供了更多的灵活性,同样也给使用不同工作流和模版化系统的开发者们带来了灵活性,虽然Flask历史相对更短,但它能够学习之前出现的框架并且把注意力放在了微小项目上。它大多数情况被使用在一些只有一两个功能的小型项目上。例如 httpbin,一个简单的(但很强大的)调试和测试HTTP库的项目。
    2. 最开始跟着视频学习的时候,感觉和上课老师讲的完全不一样,完全就是新的知识,完全是从头开始,我印象深刻的是虚拟环境的搭建,还有映射,数据库的连接和导入。这些步骤很大程度上一不小心就走错一步,整个程序就不成功了,我就在重新创建和不停删除虚拟环境中度过。virtualenv是一个工具,可以利用它创建与操作系统python环境相孤立的python运行环境,方便测试和开发依赖包的管理。
  2. 网站结构设计
    1. 技术分享图片

       

    2. 网站结构和上学期大体上没有什么区别,大致改了很多细致的设计。网站结构主要大概有主页、登录注册页 、发布帖子、详情页和个人中心页。新添的模块都是在这些基础上,再次修改和完善,比如主页上的导航,搜索,热门推荐和分类,详情页里的点赞收藏按键,评论列表和推荐文章,个人中心页的更改信息和我的收藏等。  
  3. 系统实现的关键算法与数据结构
    1. 系统的实现大概与上学期差不多,我大概展示新添的几个模块的功能,主py文件
    2. 修改密码
       1 #修改密码
       2 @app.route(/setPassword/<id>, methods=[GET, POST])
       3 @loginFirst
       4 def setPassword(id):
       5     if request.method == GET:
       6         return render_template(setPassword.html)
       7     else:
       8         user = User.query.filter(User.id == id).first()
       9         if user:
      10             if user.check_password(request.form.get(old)):
      11                 user.password = request.form.get(new1)
      12                 db.session.commit()
      13                 info = 修改成功
      14             else:
      15                 info = 原密码错误
      16         else:
      17             info = 未知错误
      18         return redirect(url_for(index, info=info))

       

    3. 上传头像
       1 # 上传头像
       2 @app.route(/uploadLogo/<user_id>, methods=[GET, POST])
       3 @loginFirst
       4 def uploadLogo(user_id):
       5     user = User.query.filter(User.id == user_id).first()
       6     f = request.files[logo]
       7     basepath = os.path.dirname(__file__)  # 当前文件所在路径
       8     upload_path = os.path.join(basepath, static/uploads, f.filename)  # 注意:没有的文件夹一定要先创建,不然会提示没有该路径
       9     f.save(upload_path)
      10     user.icon = uploads/ + f.filename
      11     db.session.commit()
      12     return redirect(url_for(setPassword, id=user_id));

       

    4. 个人中心以及我的收藏
       1 # 个人中心
       2 @app.route(/comment/<user_id>/<num>)
       3 @loginFirst
       4 def comment(user_id, num):
       5     user = User.query.filter(User.id == user_id).first()
       6     content = {
       7         comment: user.comment,
       8         questions: user.question,
       9         user2: user,
      10     }
      11     if (num == 1):
      12         return render_template(subComment1.html, **content, title=全部问题)
      13     elif (num == 2):
      14         return render_template(subComment2.html, **content)
      15     elif (num == 3):
      16         return render_template(subComment3.html, **content)
      17     elif (num == 4):
      18         content = {
      19             comment: user.comment,
      20             questions: user.collection.all(),
      21             user2: user,
      22         }
      23         return render_template(subComment1.html, **content, title=我的收藏)
      24     else:
      25         return render_template(subComment1.html, **content)
      1 @app.route(/c/<cf>)
      2 def c(cf):
      3     content = {
      4         questions: Question.query.filter(Question.cf == cf).order_by(-creat_time).all(),
      5         cf: Cf.query.all(),
      6         hot: Question.query.order_by(-click).all()[0:5]
      7     }
      8     return render_template(index.html, **content)

       

    5. 详情页的点赞和收藏功能
       1 # 详情页
       2 @app.route(/detail/<question_id>, methods=[GET, POST])
       3 @loginFirst
       4 def detail(question_id):
       5     quest = Question.query.filter(Question.id == question_id).first()
       6     u = User.query.filter(User.id == session.get(user_id)).first()
       7     if request.method == POST:
       8         if request.form.get(click) == 1:
       9             quest.click = quest.click + 1
      10         if request.form.get(collection) == 1:
      11             user = u
      12             user.collection.append(quest)
      13             db.session.add(user)
      14     col = u.collection.filter_by(id=question_id).first()
      15     if col is None:
      16         col = {}
      17     comment = Comment.query.filter(Comment.question_id == question_id).order_by(-creat_time).all()
      18     quest.look = quest.look + 1
      19     content = {
      20         ques: quest,
      21         comment: comment,
      22         col: col,
      23         questions: Question.query.filter(Question.cf == quest.cf).all(),
      24     }
      25     db.session.commit()
      26     return render_template(detail.html, **content)

       

    6. 高级查找
       1 # 高级查找
       2 @app.route(/search)
       3 def search():
       4     qu = request.args.get(q)
       5     c = ‘‘ if request.args.get(c) == ‘‘ else request.args.get(c)
       6     y = ‘‘ if request.args.get(y) == ‘‘ else request.args.get(y)
       7     query = Question.query.filter(
       8         or_(
       9             Question.title.contains(qu),
      10             Question.detail.contains(qu),
      11         ),
      12         Question.cf.like(% + c + %),
      13         Question.creat_time.like(% + y + %),
      14     ).order_by(-creat_time).all()
      15     context = {
      16         questions: query,
      17         cf: Cf.query.all(),
      18         hot: Question.query.order_by(-click).all()[0:5]
      19     }
      20     return render_template(index.html, **context)

       

  4. 数据库设计
    1. 数据库的设计,新添了两个表,分别是收藏表和分类栏目表,数据库的设计在虚拟环境里面,需要在虚拟环境里python manage.py db init,更新需要的库和更新你创的数据库模型,并把它导入进去,然后在数据库就能见到了新创的表了。
    2. 技术分享图片

       

    3. 收藏表
      1 # 收藏表
      2 Collection = db.Table(
      3     collection,
      4     db.Column(id, db.Integer, primary_key=True, autoincrement=True),
      5     db.Column(book_id, db.Integer, db.ForeignKey(question.id)),  # 评论对应的文章的id
      6     db.Column(collection, db.Integer, db.ForeignKey(user.id)),  # 收藏用户的id
      7     db.Column(createdate, db.DATETIME)  # 发布时间
      8 )
       技术分享图片

       

       

       

    4. 分类表,需在后台手动添加数据
      1 # 分类
      2 class Cf(db.Model):
      3     __tablname__ = cf
      4     id = db.Column(db.Integer, primary_key=True, autoincrement=True)  # 数据库唯识别id
      5     name = db.Column(db.String(30))  # 文章名称
      6     context = db.Column(db.TEXT)  # 分类内容

       技术分享图片

       

  5. 模块详细设计
    1. 模块设计大概与上学期差不多,我大概展示新添的几个模块的功能,主html文件,都是在有母版的继承下展开的
    2. 更改信息(上传头像和修改密码的功能)
      {% extends ‘base.html‘ %}
      {% block title %}
          修改信息
      {% endblock %}
      
      {% block link %}
      
      {% endblock %}
      
      {% block box %}
          <div class="container" style="padding-top: 200px;">
              <div class="row clearfix">
                  <div class="col-md-2 column">
                  </div>
                  <div class="col-md-8 column">
                      <div style="margin: 80px 0px;margin-left: 70px;">
                          <form class="form-horizontal" role="form" method="post" enctype="multipart/form-data" action="{{ url_for(‘uploadLogo‘,user_id=user_id) }}">
                              <div class="form-group">
                                  <div class="col-sm-10">
                                      <h1>上传头像</h1>
                                      <input type="file" id="exampleInputFile" name="logo" required>
                                      <button type="submit" class="btn btn-default">上传头像</button>
                                      <img src="{{ url_for(‘static‘,filename=user.icon) }}" width="100px"/>
                                  </div>
                              </div>
                          </form>
                      </div>
                      <hr>
                      <form class="form-horizontal" role="form" method="post">
      
                          <div class="form-group" >
                              <h1 style="margin-left: 70px;">修改密码</h1>
                              <label for="inputEmail3" class="col-sm-2 control-label">原密码</label>
                              <div class="col-sm-10">
                                  <input type="password" name="old" class="form-control" id="p1" required/>
                              </div>
                          </div>
                          <div class="form-group">
                              <label for="inputPassword3" class="col-sm-2 control-label">新密码</label>
                              <div class="col-sm-10">
                                  <input type="password" name="new1" class="form-control" id="p2" required/>
                              </div>
                          </div>
                          <div class="form-group">
                              <label for="inputPassword3" class="col-sm-2 control-label">确定密码</label>
                              <div class="col-sm-10">
                                  <input type="password" class="form-control" id="p3" required/>
                              </div>
                          </div>
                          <div class="form-group">
                              <div class="col-sm-offset-2 col-sm-10">
                                  <button type="submit" class="btn btn-default" onclick="return f()">提交</button>
                              </div>
                          </div>
                      </form>
      
                  </div>
                  <div class="col-md-2 column">
                  </div>
              </div>
          </div>
      {% endblock %}
      
      {% block script %}
          <script>
              function f() {
                  if ($(#p2).val() == $(#p3).val())
                      return true;
                  alert(两次密码不一样);
                  return false;
              }
          </script>
      {% endblock %}

       

    3. 个人中心页(我的问答、评论、信息、收藏等)
      {% extends ‘base.html‘ %}
      {% block title %}
          个人中心
      {% endblock %}
      
      {% block link %}
      
      {% endblock %}
      
      {% block box %}
          <div class="container">
              <div class="row clearfix">
                  <div class="col-md-2 column">
                  </div>
                  <div class="col-md-8 column">
                      <ul class="nav nav-tabs">
                          <li role="presentation"><a href="{{ url_for(‘comment‘,user_id=user2.id,num=‘1‘) }}">全部问题</a></li>
                          <li role="presentation"><a href="{{ url_for(‘comment‘,user_id=user2.id,num=‘2‘) }}">全部评论</a></li>
                          <li role="presentation"><a href="{{ url_for(‘comment‘,user_id=user2.id,num=‘3‘) }}">个人信息</a></li>
                          <li role="presentation"><a href="{{ url_for(‘comment‘,user_id=user2.id,num=‘4‘) }}">我的收藏</a></li>
                      </ul>
                      {% block subComment %}{% endblock %}
                  </div>
                  <div class="col-md-2 column">
                  </div>
              </div>
          </div>
      {% endblock %}
      
      {% block script %}
      
      {% endblock %}
      {% extends ‘comment.html‘ %}
      {% block subComment %}
          <ul class="list-group" style="">
              <h1>{{ title }}</h1>
              {% for foo in questions %}
                  <li class="list-group-item" style="width: 800px">
                      <a class="wrap-img" href="#" target="_blank">
                          <img src="{{ url_for(‘static‘,filename=foo.author.icon) }}" width="50px">
                      </a>
                      <span class="glyphicon glyphicon-left" aria-hidden="true"></span>
                      <a href="{{ url_for(‘comment‘,user_id=foo.author.id ,num=‘1‘)}}"
                         target="_blank">{{ foo.author.username }}</a>
                      <br>
                      <a href="{{ url_for(‘detail‘,question_id=foo.id) }}">{{ foo.title }}</a>
                      <span class="badge">{{ foo.creat_time }}</span>
                      <p style="">{{ foo.detail[0:50] }}...
                      </p>
                  </li>
              {% endfor %}
          </ul>
      {% endblock %}
      {% extends ‘comment.html‘ %}
      {% block subComment %}
          <ul class="list-group" style="margin-top: 30px;">
              <h1>全部评论</h1>
              {% for com in comment %}
                  <li class="list-group-item" style="width: 800px">
                      <a class="wrap-img" href="#" target="_blank">
                          <img src="{{ url_for(‘static‘,filename=com.author.icon) }}" width="50px">
                      </a>
                      <span class="glyphicon glyphicon-left" aria-hidden="true"></span>
                      <a href="{{ url_for(‘comment‘,user_id=com.author.id,num=‘1‘) }}"
                         target="_blank">{{ com.author.username }}</a>
                      <br>
                      <span class="badge">{{ com.creat_time }}</span>
                      <p style="">{{ com.detail }}</p>
                  </li>
              {% endfor %}
          </ul>
      {% endblock %}
      {% extends ‘comment.html‘ %}
      {% block subComment %}
          <div class="list-group-item" style="margin-top: 30px;width: 800px;">
              <h1>头像:
                  <img src="{{ url_for(‘static‘,filename=user2.icon) }}" width="100px">
              </h1>
              <h1>名称:
                  <small>{{ user2.username }}</small>
              </h1>
      
              <h1>问题数:
                  <small>{{ questions|length }}</small>
              </h1>
              <h1>评论数:
                  <small>{{ comment|length }}</small>
              </h1>
          </div>
      {% endblock %}

       

    4. 详情页(浏览数,点赞、收藏功能,评论展示功能。热门文章推荐功能)
      {% extends ‘base.html‘ %}
      {% block title %}
          详情页
      {% endblock %}
      
      {% block link %}
          <script src="{{ url_for(‘static‘,filename=‘ueditor/ueditor.config.js‘) }}"></script>
          <script src="{{ url_for(‘static‘,filename=‘ueditor/ueditor.all.min.js‘) }}"></script>
          {#    <script src="{{ url_for(‘static‘,filename="front/js/front_pdetail.js") }}"></script>#}
      {% endblock %}
      
      {% block box %}
          <div class="container">
              <div class="row clearfix">
                  <div class="col-md-2 column">
                  </div>
                  <div class="col-md-8 column">
      
                      <h1>{{ ques.title }}</h1>
                      <div style="padding: 10px;">
                          <span style="padding-left: 10px;">作者:{{ ques.author.username }}</span>
                          <span style="padding-left: 10px;">浏览数:{{ ques.look }}</span>
                          <span style="padding-left: 10px;">点赞数:{{ ques.click }}</span>
                          <form method="post" style="display: inline-block;padding-left: 10px;">
                              <input name="click" value="1" type="hidden">
                              <button class="glyphicon glyphicon-heart">点赞</button>
                          </form>
                          <form method="post" style="display: inline-block;padding-left: 10px;">
                              <input name="collection" value="1" type="hidden">
                              {% if col %}
                                  <button type="button" disabled>已收藏</button>
                              {% else %}
                                  <button class="glyphicon glyphicon-leaf">收藏</button>
                              {% endif %}
                          </form>
                      </div>
                      <div style="padding: 70px 20px;margin-bottom: 100px;border:1px solid #eee;">
      {#                    <p>#}
      {#                        {{ ques.detail }}#}
      {##}
      {#                    </p>#}
                          <article class="ques-detail" id="ques-detail" data-id="{{ ques.id }}">
                              {{ ques.detail |safe }}
                          </article>
                      </div>
                      <hr>
                      <div style="padding: 15px;">
                          <h1>推荐文章</h1><br>
                          {% for foo in questions %}
                              <li class="list-group-item" style="width: 700px">
                                  <a class="wrap-img" href="#" target="_blank">
                                      <img src="{{ url_for(‘static‘,filename=foo.author.icon) }}" width="50px">
                                  </a>
                                  <span class="glyphicon glyphicon-user" aria-hidden="true"></span>
                                  <a href="{{ url_for(‘comment‘,user_id=foo.author.id ,num=‘1‘) }}"
                                     target="_blank">{{ foo.author.username }}</a>
                                  <br>
                                  <a href="{{ url_for(‘detail‘,question_id=foo.id) }}">{{ foo.title }}</a>
                                  <span class="badge">{{ foo.creat_time }}</span>
                                  <p style="">{{ foo.detail[0:50] }}...
                                  </p>
                              </li>
                          {% endfor %}
                      </div>
      
                      <hr>
      
                      <form class="form-horizontal" role="form" method="post" action="{{ url_for(‘answer‘) }}">
                          <div class="form-group">
                              <label for="inputEmail3" class="col-sm-2 control-label">评论内容</label>
                              <div class="col-sm-10">
      
                                  <input type="text" name="author_id" value="{{ user.id }}" hidden>
                                  <input type="text" name="question_id" value="{{ ques.id }}" hidden>
                                  <script id="editor" type="text/plain" name="detail"></script>
      {#                            <textarea class="form-control" name="detail" rows="10"></textarea>#}
                              </div>
                          </div>
                          <div class="form-group">
                              <div class="col-sm-offset-2 col-sm-10">
                                  <button type="submit" class="btn btn-default" id="comment-btn">发布</button>
                              </div>
                          </div>
                      </form>
                      <hr>
                      <h1>用户评论</h1><br>
                      <ul>
                          {% for com in comment %}
                              <li class="list-group-item">
                                  <img src="{{ url_for(‘static‘,filename=com.author.icon) }}" width="50px">
                                  {#                            <h4>{{ com.author.username }}</h4>#}
                                  <h4><a href="{{ url_for(‘comment‘,user_id=com.author.id ,num=‘1‘) }}"
                                         target="_blank">{{ com.author.username }}</a></h4>
                                  <span class="badge">{{ com.creat_time }}</span>
                                  <div>
                                      <p>{{ com.detail }}</p>
                                  </div>
                              </li>
                          {% endfor %}
                      </ul>
                  </div>
                  <div class="col-md-2 column">
                  </div>
              </div>
          </div>
      {% endblock %}
      
      {% block script %}
          <script>
              $(function () {
                  var ue = UE.getEditor("editor", {
                      serverUrl: ../static/ueditor/upload/,
                      "toolbars": [
                          [
                              undo,
                              redo,
                              bold,
                              italic,
                              source,
                              blockquote,
                              selectall,
                              fontfamily,
                              fontsize,
                              simpleupload,
                              emotion
                          ]
      
                      ]
      
                  })
                  window.ue = ue;
      
              });
      </script>
      {% endblock %}

       

    5. 主页(导航里的高级搜索,按文字查找、分类查找、时间查找等)
      <nav class="navbar navbar-default" role="navigation">
          <div class="container-fluid">
              <div class="navbar-header">
                  <img src="{{ url_for(‘static‘,filename=‘img/8-1306061335461b.jpg‘) }}" alt="" width="50px">
                  <a class="navbar-brand" href="{{ url_for(‘index‘) }}">广商论坛</a>
              </div>
              <div>
                  <ul class="nav navbar-nav">
                      <li class="dropdown">{# active 可以显示为点亮 #}
                          <a href="{{ url_for(‘index‘) }}" class="dropdown-toggle" data-toggle="dropdown">
                              首页
                              <b class="caret"></b>
                          </a>
                          <ul class="dropdown-menu">
                              <li><a href="#">军事</a></li>
                              <li><a href="#">体育</a></li>
                              <li><a href="#">生活</a></li>
                              <li class="divider"></li>
      
                          </ul>
                      </li>
                      {% if user_id %}
                          <li class="drop_down">
                              <a href="javascript:void(0)" class="dropdown-toggle" data-toggle="dropdown">
                                  {{ user.username }}
                                  <b class="caret"></b>
                              </a>
                              <ul class="dropdown-menu">
                                  <li><a href="{{ url_for(‘setPassword‘,id=user_id) }}">更改信息</a></li>
                                  <li><a href="{{ url_for(‘comment‘,user_id=user_id,num=‘1‘) }}">个人中心</a></li>
                                  <li class="divider"></li>
                                  <li><a href="{{ url_for(‘logout‘) }}">退出</a></li>
                              </ul>
                          </li>
                      {% else %}
                          <li class=""><a href="{{ url_for(‘login‘) }}">登录</a></li>
                          <li><a href="{{ url_for(‘regist‘) }}">注册</a></li>
                      {% endif %}
                      <li class=""><a href="{{ url_for(‘question‘) }}">发布问答</a></li>
                      <li class="">
                          <form class="navbar-form navbar-left" role="search" action="{{ url_for(‘search‘) }}" method="get">
                              <div class="form-group">
                                  <input type="text" class="form-control" placeholder="搜索" required name="q">
                              </div>
                              <div class="form-group">
                                  <select class="form-control" name="c">
                                      <option value="" selected>--分类--</option>
      
                                      {% for c in cf %}
                                          <option value="{{ c.id }}">{{ c.name }}</option>
                                      {% endfor %}
                                  </select>
                              </div>
                              <div class="form-group">
                                  <select class="form-control" name="y">
                                      <option value="" selected>--发布年份--</option>
                                      <option >2018</option>
                                      <option>2017</option>
                                      <option>2016</option>
                                      <option>2015</option>
                                      <option>2014</option>
                                  </select>
                              </div>
                              <button type="submit" class="btn btn-default">搜索</button>
                          </form>
                      </li>
                  </ul>
              </div>
          </div>
      </nav>

       

  6. 成品展示
      1. 网站父模板统一布局:头部导航条、底部图片导航、中间主显示区域布局
        • 技术分享图片
        • 技术分享图片

        •  

           

            
      2. 注册、登录、注销
        • 技术分享图片

           

        • 技术分享图片

           

      3. 发布、列表显示
        • 技术分享图片

           

      4. 详情页
        • 技术分享图片

           

      5. 评论、列表显示
        • 技术分享图片

           

      6. 个人中心
        • 技术分享图片

           

      7. 搜索,条件组合搜索
        • 技术分享图片

           

      8. 文章分类、显示
        • 技术分享图片技术分享图片

           

           

      9. 点赞、收藏
        • 技术分享图片

           

      10. 修改密码、头像、上传头像
        • 技术分享图片

           

      11. 我的发布、点赞、收藏、评论
        • 技术分享图片技术分享图片
        • 技术分享图片

           

           

      12. 高级搜索
        • 技术分享图片

           

      13. 热门文章、推荐文章
        • 技术分享图片

           

        • 技术分享图片

           

管理信息系统 课程设计

原文:https://www.cnblogs.com/iamzhuangyuan/p/9170320.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!