管理信息系统 课程设计

一、网站结构设计管理信息系统 课程设计_第1张图片

二、模块详细设计

1.导航条

2.注册页面

# 跳转注册。

@app.route('/zhuce/', methods=['GET', 'POST'])  # methods定义它有两种请求方式,因为它在表单的请求是post,类似我们在idea中的sava请求模式

def zhuce():

    if request.method == 'GET':

        return render_template('zhuce.html')

    else:

        username = request.form.get('user')  # post请求模式,安排对象接收数据

        password = request.form.get('pass')

        nickname = request.form.get('nickname')

        user = User.query.filter(User.username == username).first()  # 作查询,并判断

        if user:

            return u'该用户已存在'

        else:

            user = User(username=username, password=password, nickname=nickname)  # 将对象接收的数据赋到User类中,即存到数据库

            db.session.add(user)  # 执行操作

            db.session.commit()

            return redirect(url_for('denglu'))  # redirect重定向

管理信息系统 课程设计_第2张图片

3.登录页面

# 跳转登陆。

@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.permanent = True  # 设置session过期的时间

                return redirect(url_for('daohang'))

            else:

                return u'用户密码错误'

        else:

            return u'用户不存在,请先注册'

管理信息系统 课程设计_第3张图片

4.注销

# 跳转注销。

@app.route('/logout')

def logout():

    session.clear()  # 注销时删除所有session

return redirect(url_for('daohang'))

5.完成发布功能

.编写请求登录的装饰器:

# 跳转某页面之前先进行登录。定义decorator可以增强函数功能,装饰器本身是函数,入参是函数,返回值也是函数

def loginFirst(fabu):

    @wraps(fabu)  # 加上wraps,它可以保留原有函数的__name__,docstring

    def wrapper(*args, **kwargs):  # 定义wrapper函数将其返回,用*args, **kwargs把原函数的参数进行传递

        if session.get('user'):  # 只有经过登陆,session才能记住并get到值

            return fabu(*args, **kwargs)

        else:

            return redirect(url_for('denglu'))

 

return wrapper

.应用装饰器:

@loginFirst  # 将decorator定义的增强函数放在待增强函数定义的上面

@app.route('/fabu/', methods=['GET', 'POST'])  # methods定义它有两种请求方式

@loginFirst  # 将decorator定义的增强函数放在待增强函数定义的上面

def fabu():

.建立发布内容的对象关系映射

class Fabu(db.Model):

    __tablename__ = 'fabu'

    id = db.Column(db.Integer, primary_key=True, autoincrement=True)

    title = db.Column(db.String(100), nullable=False)

    detail = db.Column(db.Text, nullable=False)

    creat_time = db.Column(db.DateTime, default=datetime.now)  # 提交时间会自己赋值

    author_id = db.Column(db.Integer, db.ForeignKey('user.id'))  # 数据类型是db.Integer,db.ForeignKey参数指定外键是哪个表中哪个id

    author = db.relationship('User', backref=db.backref('fabu'))  # 建立关联,其author属性将返回与问答相关联的用户实例,相当于数据库中的表连接

# 第一个参数表明这个关系的另一端是哪个类,第二个参数backref,将向User类中添加一个fabu属性,从而定义反向关系,这一属性可访问Fabu类,获取的是模型对象

.完成发布函数,保存数据库,重定向到首页

# 跳转发布。

@app.route('/fabu/', methods=['GET', 'POST'])  # methods定义它有两种请求方式

@loginFirst  # 将decorator定义的增强函数放在待增强函数定义的上面

def fabu():

    if request.method == 'GET':

        return render_template('fabu.html')

    else:

        title = request.form.get('title')  # post请求模式,安排对象接收数据

        detail = request.form.get('detail')

        author_id = User.query.filter(

            User.username == session.get('user')).first().id  # 将session get到的user进行查询并取出id放到外键author_id中

        fabu = Fabu(title=title, detail=detail, author_id=author_id)  # 将对象接收的数据赋到Fabu类中,即存到数据库

        db.session.add(fabu)  # 执行操作

        db.session.commit()  # 提交到数据库

        return redirect(url_for('daohang'))  # redirect重定向

6.问答发布

           

               

发布

               

                        {% for foo in fabus %}

                            

  •                            

                                        class="glyphicon glyphicon-fire">{{ foo.author.username }}

                                

                                        href="{{ url_for('fabuview',fabu_id=foo.id) }}">{{ foo.title }}

                                {{ foo.creat_time }}

                                

                               

    {{ foo.detail }}

                           

  •                     {% endfor %}

                   

           

管理信息系统 课程设计_第4张图片

7.发布详情

# 跳转发布详情

@app.route('/fabuview/')  # 和idea的update一样,将id带到控制器

def fabuview(fabu_id):

    fa = Fabu.query.filter(Fabu.id == fabu_id).first()  # 根据主页带回来的id查询出整条元组记录,丢进fa

    comments = Comment.query.filter(Comment.fabu_id == fabu_id).all()  # 根据带回来的Fabu的id在Comment查询出所有评论

return render_template('fabuview.html', fa=fa, comments=comments)  # 把值fa丢进键fa,在fabuview.html页面调用

管理信息系统 课程设计_第5张图片

8.个人信息中心

# 跳转用户详情

@app.route('/yonghu//')  # 为了把页面分开,我们在html页面传了一个tag参数

def yonghu(username_id, tag):

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

    context = {

        'userid': user.id,

        'username': user.username,

        'fabus': user.fabu,

        'comments': user.comments

    }  # 根据tag的不同去到不同页面,一个请求跳转3个不同页面

    if tag == '1':

        return render_template('yonghu1.html', **context)

    elif tag == '2':

        return render_template('yonghu2.html', **context)

    else:

        return render_template('yonghu3.html', **context)

管理信息系统 课程设计_第6张图片

9.密码保护

from werkzeug.security import generate_password_hash,check_password_hash

 

_password = db.Column(db.String(200), nullable=False)   # 密码加密内部使用

 

    @property   # 定义函数,需要用属性时可以用函数代替

    def password(self):   # 密码加密外部使用

        return self._password

 

    @password.setter

    def password(self,row_password):   # 密码进来时进行加密,generate_password_hash是一个密码加盐哈希函数,生成的哈希值可通过check_password_hash()进行验证。

        self._password = generate_password_hash(row_password)

 

    def check_password(self,row_password):   # check_password_hash函数用于验证经过generate_password_hash哈希的密码。若密码匹配,则返回真,否则返回假。

        result = check_password_hash(self._password,row_password)

        return result

10.密码修改

密码修改





   
   

                       value="{{ users.username }}" readonly>
   



   
   

                        required>
   



   

       
   

管理信息系统 课程设计_第7张图片

11. 我的发布、点赞、收藏、评论

{% extends 'yonghufather.html' %}

{% block yonghubody %}
   

个人信息


   

{% endblock %}

三、成品展示

管理信息系统 课程设计_第8张图片

你可能感兴趣的:(管理信息系统 课程设计)