• 管理信息系统 课程设计


    引言

    1.1编写目的

    本阶段完成网页的大致设计并明确网站的数据库设计与功能。本概要设计说明书的目的就是进一步细化网页设计阶段得出的网页概貌,并把它展示在浏览器中。

    预期读者:网页设计工程师、网站开发员

    1.2背景

    任务提出者:杜云梅

    开发者:李明惠

    用户:网站交流平台用户

    1.3定义

    1.3.1 Python+Flask框架

    Flask是当下流行的Web框架,它是用Python实现的。Flask显著的特点是:它是一个“微”框架。”微”意味着Flask旨在保持核心的简单,但同时又易于扩展。默认情况下,Flask 不包含数据库抽象层、表单验证,或是其它任何已有多种库可以胜任的功能。然而,Flask 支持用扩展来给应用添加这些功能。众多的扩展提供了数据库集成、表单验证、上传处理、各种各样的开放认证技术等功能。Flask的这些特性,使得它在Web开发方面变得非常流行。

    1.3.2    MYSQL

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。

    MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

    1. 网站结构设计

    2.1开发背景

    本网站主要是面向动漫爱好者的交流网站。如今,有许多爱好动漫的宅男宅女们,他们缺少一个能够畅所欲言的平台,此网站可以为该用户群提供一个交流的平台。

    2.2基本设计概念

    本网站是一个面对所有已注册用户的交流平台,本平台未登录用户可以看到首页,其他功能需要登录才能进行操作

    2.2.1 业务流程

    本流程图是一个可以描述各个作者发布的帖子、评论、以及用户自身的信息等等的图表。这个图可以直观的看出流程中有哪里有错误,可以更好的改正。他只是物理的概念没有数据的概念。他呈现的是完整的顺序。

    网站的功能流程定义如图2-1网站功能流程图所示:

     

     

    3. 模块设计

    3.1 数据库概念设计

    (1)用户信息E-R图

    (2)发布答题E-R图

    (3)评论信息E-R图

    (4)帖子分类E-R图

    (5)  点赞信息E-R图

    3.2数据库逻辑设计

    逻辑设计阶段是将概念模式转化为数据模型,得到数据库的逻辑模式。本网站的数据模型为关系模型。在这里主要介绍涉及的5个关系模型,以下是E-R模型向关系模型的转换:

    (1)    用户信息表(用户ID,用户名,密码,用户头像)

    (2)  问题信息表(问题编号,作者编号,标题,详情,类别,浏览次数,点击次数,添加时间)

    (3)  评论信息表(评论编号,问题编号,作者编号,添加时间,评论详情)

    (4)  分类信息表(类别,详细类别)

    (5)  点赞信息表(点赞编号,点赞问题,点赞次数,添加时间)、

    表2-1    user表(用户信息表)

    列名

    含义

    数据类型

    约束

    id

    编号

    int

    非空

    username

    用户名

    nchar(20)

    非空

    _password

    密码

    nchar(200)

    非空

    say

    评论

    nchar(50)

    非空

    icon

    头像

    nchar(64)

    非空

    表2-2   question表(问题信息表)

    列名

    含义

    数据类型

    约束

    id

    编号

    int

    非空

    author_id

    作者

    int

     

    title

    标题

    varchar(225)

    非空

    detail

    详情

    text

    非空

    cf

    类别

    int

     

    look

    浏览次数

    int

     

    click

    点击次数

    int

     

    time

    添加时间

    datatime

     

    表2-3   comment表(评论信息表)

    列名

    含义

    数据类型

    约束

    id

    编号

    int

    非空

    author_id

    作者

    int

     

    question_id

    问题编号

    int

     

    detail

    详情

    text

    非空

    time

    评论时间

    datetime

     

    表2-4   cf表(分类信息表)

    列名

    含义

    数据类型

    约束

    id

    编号

    int

    非空

    name

    类别

    varchar(30)

     

    context

    详细类别

    text

     

    表2-5   collection表(点赞信息表)

    列名

    含义

    数据类型

    约束

    id

    编号

    int

    非空

    book_id

    点赞问题

    int

     

    collection

    点赞次数

    int

     

    createdate

    时间

    datetime

     

    4.系统实现的关键算法

    在整个网站的设计中,数据库与前台链接是必不可少的,将配置文件写成了一个config.py文件对数据库进行配置。

    import os
    SECRET_KEY = os.urandom(24)
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:738312@localhost:3306/data1?charset=utf8'
    SQLALCHEMY_TRACK_MODIFICATIONS = False

     

    为了让未登录用户无法访问除首页以外的页面,我写了一个登陆前装饰器:

    def loginFrist(func):

        @wraps(func)

        def wrappers(*args, **kwargs):

            if session.get('user'):

                return func(*args, **kwargs)

            else:

                return redirect(url_for('login'))

    return wrappers

    用户可以对自己的头像和密码进行修改,我单独为修改头像和修改密码添加了一个新的页面,修改头像代码以及修改密码代码如下:

    @app.route('/setPassword/<id>', methods=['GET', 'POST'])

    @loginFirst

    def setPassword(id):

        if request.method == 'GET':

            return render_template('setPassword.html')

        else:

            user = User.query.filter(User.id == id).first()

            if user:

                if user.check_password(request.form.get('old')):

                    user.password = request.form.get('new1')

                    db.session.commit()

                    info = '修改成功'

                else:

                    info = '原密码错误'

            else:

                info = '未知错误'

            return redirect(url_for('index', info=info))

    # 上传头像

    @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/uploads', f.filename)  # 注意:没有的文件夹一定要先创建,不然会提示没有该路径

        f.save(upload_path)

        user.icon = 'uploads/' + f.filename

        db.session.commit()

        return redirect(url_for('setPassword', id=user_id));

    5.成品展示

    本网站界面采用DIV+CSS布局以及Bookstraps布局的方式,使网页给用户舒适的视觉感受,并用JavaScript脚本语言对网页进行修饰,给用户一种良好的用户体验。

    5.1 用户注册、登录页面的实现

    用户注册后,跳转到登录页面,登录成功后跳转到首页,首页会出现用户名。

     

    修改头像以及修改密码功能

     

    用户的全部问答,全部评论,个人资料页面

     

     

    首页有轮播图,还有搜索框,可以模糊查询,分类查询,可以点赞

     

    固定的底部导航

     

    顶部导航

     

    可以显示头像

     

    发布帖子

     

  • 相关阅读:
    团队第三次作业 ——需求分析
    个人作业——IM SDK 评测
    AFLW如何获取你想要的21点人脸关键点数据
    本地ubuntu下pycharm 如何利用远程开发环境时显示图片
    pandas如何去掉时间列的小时只保留日期
    如何通过numpy获得二维或多维数组的最大、小值索引
    怎么理解np.random.seed()?
    python+opencv2相机位姿估计
    Image Style Transfer:多风格 TensorFlow 实现
    python matplotlib 播放图片变化过程
  • 原文地址:https://www.cnblogs.com/liminghui3/p/9191150.html
Copyright © 2020-2023  润新知