期末作品检查

1.个人学期总结

这个学期,学习了管理信息系统这一门课,使我受益匪浅,学习了许多知识,也让我对这一门课有了重新的认识。

这门课是一门注重于平时积累和实践的课程,是一门对逻辑管理要求非常高的一门课程。刚开始接触这门课的时候,感到非常的新奇,让我更有动力去学习,但慢慢下来,随着学习的深入,逐渐发现,可门课的知识也渐渐的难了起来,虽是如此,知识难也有它的可用之处,可以实现许多功能,课程上学到的东西可以和管理知识联系起来,这使我更有深入学习这门课程的想法。老师一步一步的教导我们,从入门到深入,到最后可以完成一个简单的作品,这必须要靠理论知识和操作知识联系起来,才能理解和掌握这一门课程。

首先从基础知识入门,用python绘画了各种图形和进行文本的输入输出、字符串操作、运算以及使用datetime处理时间和日期与其相关的知识等等,还学习了列表、字典、元组、集合的遍历,这也为之后的学习奠定了基础。我们随后学习了web基础,用html元素制作web页面,完成了导航、头部、CSS基础;并且利用JavaScript完成登录页面与注册页面的前端;之后还学习了夜间模式的开闭和父模板的制作,并且加载静态文件、完成父模板的继承和扩展;连接数据库,通过用户模型,对数据库进行增删改查;完成注册和登录功能,用session记住用户名;最后完成主页显示列表、发布问答功能以及问答详情功能、发布评论;最后完成个人中心,统计发表数量和评论数,并且设置密码保护和搜索功能。

一个学期下来,把学到的知识都运用在本次的作业上,但是我还会继续深入学习,完成、呈现一个更加完善的作品。

 

2.总结Python+Flask+MysqL的web建设技术过程,标准如下:

1.即是对自己所学知识的梳理

2.也可作为初学入门者的简单教程

3.也可作为自己以后复习的向导

4.也是一种向外展示能力的途径

完成作品文件所有的css、js、image、html以及py文件

一、父模板(后面每个html继承父模板base.html)。连接base.css、base.js(灯光的开闭) 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %}首页{% endblock %}</title>
    <script src="{{ url_for('static',filename='js/base.js') }}" type="text/javascript"></script>
    <link rel="stylesheet" type="text/css" href="{{ url_for('static',filename='css/base.css') }}">

</head>
<body id="myBody">
{% block head %}{% endblock %}
<div class="a">
    <div style="position: absolute;top: 2%">
        <a href="{{ url_for('index') }}">首页</a>
        <a href="{{ url_for('question') }}">发布问答</a>
    </div>
        <form action="{{ url_for('search') }}" method="get" >
            <div style="position: absolute;left: 12%;top: 2%;">
                <input type="text" class="form-control" name="q" placeholder="请输入关键字">
                <button type="submit" class="btn btn-default">查找</button>

            </div>
        </form>
    <div class="navi" style="position: absolute;right:5%;top: 2%" >
    <a class="navi" href="">收藏</a>
        <img class="navi" id="on_off" onclick="mySwitch()" src="http://www.runoob.com/images/pic_bulbon.gif " width="20px">
            {% if username %}
                <a href="{{ url_for('usercenter',user_id=session.get('userid'),tag=1) }}">{{ session.get('user') }}</a>
                <a href="{{ url_for('logout') }}">注销</a>
            {% else %}
                <a href="{{ url_for('login') }}">登录</a>
                <a href="{{ url_for('register') }}">注册</a>
            {% endif %}

    </div>

</div>
{%  block main %}{% endblock %}
<div class="footer_box">
    版权所有@
</div>

</body>
</html>

二、注册功能(继承父模板base.html),连接数据库。连接register.css、js24.js(设置注册条件)

{% extends'base.html' %}

{% block title %}
注册
{% endblock %}
{% block head %}
    <link rel="stylesheet" type="text/css" href="{{ url_for('static',filename='css/js24.css') }}">
    <script src="{{ url_for('static',filename='js/js24.js') }}"></script>
{% endblock %}
{% block main %}
<div class="bg-img">
    <div class="box">
        <h1>注册</h1>
        <div class="input_box">
            <form action="{{ url_for('register') }}" method="post">
            用户名:<input id="username" type="text" placeholder="请输入新用户名" name="username">
        </div>
        <br>
        <div class="input_box">
            昵称:&nbsp<input id="nickname" type="text" placeholder="请输入昵称" name="nickname">
        </div>
        <br>
        <div class="input_box">
            密 码:&nbsp&nbsp<input id="userpass" type="password" placeholder="请输入新密码" name="password">
        </div>
        <br>
        <div class="input_box">
            密 码:&nbsp&nbsp<input id="reuserpass" type="password" placeholder="请再次输入新密码">
        </div>
        <br>
        <div class="link_box">
            <a href="{{ url_for('login') }}">
                已有帐号,立即登陆
                <b> ></b>
            </a>
        </div>
        <div id="error_box"><br></div>
        <div class="input_box">
           <button id="button" onclick="return fnRegister()">注册</button>

        </div>
        </form>
    </div>
</div>

{% endblock %}

三、登录功能(继承base.html)。连接login.css、js23.js(设置登录条件)

{% extends'base.html' %}

{% block title %}
登录
{% endblock %}
{% block head %}
    <link rel="stylesheet" type="text/css" href="{{ url_for('static',filename='css/js23.css') }}">
    <script src="{{ url_for('static',filename='js/js23.js') }}"></script>
{% endblock %}
{% block main %}
<div class="bg-img">
   <div class="box">
       <form action="{{ url_for('login') }}" method="post">
       <h1>登录</h1>
       <div class="input_box">
           <h3>username</h3>
           <input id="username" type="text" placeholder="请输入用户名" name="username">
       </div>
       <div class="input_box">
           <h3>userpass</h3>

           <input id="userpass" type="password" placeholder="请输入密码" name="password">
       </div>
       <br>
       <div class="link_box">
           <a href="{{ url_for('register') }}">
               没有账号,立即注册
               <b> ></b>
           </a>
       </div>
       <div id="error_box"><br></div>
       <div class="input_box">
           <button onclick="return fnLogin()">LOGIN</button>
           <button onclick=window.alert(fnLogin())>RESET</button>
       </div>
           </form>
   </div>
</div>
{% endblock %}

四、建立主页(继承base.html),并且有用户导航和已发布的问答。连接index.css

{% extends'base.html' %}

{% block title %}
    首页
{% endblock %}

{% block head %}
    <script src="{{ url_for('static',filename='js/index.js') }}" type="text/javascript"></script>
    <link rel="stylesheet" type="text/css" href="{{ url_for('static',filename='css/index.css') }}">

{% endblock %}

{% block main %}
    <div class="index">
    <div>
        <div class="img">
            <a href="https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=%E5%B0%8F%E7%8C%AA%E4%BD%A9%E5%A5%87&rsv_pq=f77d08900001a419&rsv_t=45ebl8vOLWaojJB%2BJqWl4G2jgewDoaq6Eal6j0Zx2EIT96apylRhpP3Koqg&rqlang=cn&rsv_enter=1&rsv_sug3=6&rsv_sug1=6&rsv_sug7=100">
                <img src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1508477292746&di=b4d222e641b5c06b07c55cd205bba706&imgtype=0&src=http%3A%2F%2Fimg.mp.itc.cn%2Fupload%2F20161220%2Fca4c1e06ab854a40bb2590408a7b2f19_th.jpg"></a>
            <div class="desc"><a href="https://baike.baidu.com/item/小猪佩奇/12343674?fr=aladdin">小猪佩奇</a></div>
        </div>
        <div class="img">
            <a href="https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E6%89%98%E9%A9%AC%E6%96%AF%E5%92%8C%E4%BB%96%E7%9A%84%E6%9C%8B%E5%8F%8B%E4%BB%AC&oq=%25E5%25B0%258F%25E7%258C%25AA%25E4%25BD%25A9%25E5%25A5%2587&rsv_pq=eb12f7da00019eba&rsv_t=de8cbtTwyWVcQv6xzo8AEbWJhamBkxPdSWJh9Imdf5qYr8rt2NZHXCfYWNg&rqlang=cn&rsv_enter=1&inputT=3189&rsv_sug3=14&rsv_sug1=14&rsv_sug7=100&rsv_sug2=1&prefixsug=tuomasi&rsp=2&rsv_sug4=3188">
                <img src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1508477829747&di=fd07b5cc8dd393392af74d2b90404779&imgtype=0&src=http%3A%2F%2Ffdfs.xmcdn.com%2Fgroup23%2FM06%2F8A%2F7E%2FwKgJL1h52lGCOLCQAAEaqmTeglU035.jpg"></a>
            <div class="desc"><a href="https://baike.baidu.com/item/托马斯和他的朋友们/752251?fr=aladdin">托马斯和他的朋友们</a></div>
        </div>
        <div class="img">
            <a href="https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E7%8C%AB%E5%92%8C%E8%80%81%E9%BC%A0&oq=%25E6%2589%2598%25E9%25A9%25AC%25E6%2596%25AF%25E5%2592%258C%25E4%25BB%2596%25E7%259A%2584%25E6%259C%258B%25E5%258F%258B%25E4%25BB%25AC&rsv_pq=d23a15630001b4ed&rsv_t=7430JNuHLv7607LmZ%2B%2BWE2eYL%2Fp7GhOQe3j0f5S9RCnmHRWM5plbXIAinRg&rqlang=cn&rsv_enter=1&inputT=2790&rsv_sug3=20&rsv_sug1=19&rsv_sug7=100&rsv_sug2=1&prefixsug=maohe%2520&rsp=0&rsv_sug4=2790">
                <img src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1508477964743&di=46e94537aabf5867005957b87cd85799&imgtype=0&src=http%3A%2F%2Fcdn.aixifan.com%2Fdotnet%2Fartemis%2Fu%2Fcms%2Fwww%2F201603%2F2615504731cpun6r.jpg"></a>
            <div class="desc"><a href="https://baike.baidu.com/item/猫和老鼠/313885?fr=aladdin">猫和老鼠</a></div>
        </div>
        <div class="img">
            <a href="https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E5%A4%A9%E7%BA%BF%E5%AE%9D%E5%AE%9D&oq=%25E7%258C%25AB%25E5%2592%258C%25E8%2580%2581%25E9%25BC%25A0&rsv_pq=8de48b3f0001c6b3&rsv_t=94c1qlZLktBv27KJJZA0Sxe9rIX64JhNE%2F7O030MAq3wDdaGuEiv99uR8Jg&rqlang=cn&rsv_enter=1&inputT=2790&rsv_sug3=27&rsv_sug1=26&rsv_sug7=100&bs=%E7%8C%AB%E5%92%8C%E8%80%81%E9%BC%A0">
                <img src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1508478000480&di=5fe3f1bdcea73b098ec174ea6a7b5f8b&imgtype=0&src=http%3A%2F%2Fd2xosoyzehxi5w.cloudfront.net%2Fwp-content%2Fuploads%2F2014%2F12%2Fteletubbies-sun-baby-jess-smith-3.jpg"></a>
            <div class="desc"><a href="https://baike.baidu.com/item/天线宝宝/3232396?fr=aladdin">天线宝宝</a></div>
        </div>
    </div>
    <br><hr>
{#    <p>{{ username }}context</p>#}
    <div id="list-container">
        <ul class="list-group">
            {% for foo in questions %}
                <li>
                    <span class="glyphicon glyphicon-leaf" aria-hidden="true"></span>
                    用户:<a href="{{ url_for('usercenter',user_id=foo.author_id,tag=2) }}" target="_blank" style="text-decoration: none">{{ foo.author.username }}</a>
                    <br>
                    <a href="{{ url_for('questiondetail',question_id=foo.id) }}" class="modal-title">{{ foo.title }}</a>
                    <span class="badge">{{ foo.create_time }}</span>
                    <p style="text-indent: 18px">{{ foo.detail }}</p>
                    <img class="like" id="like_ornot" onclick="myLike()" src="../static/image/heart_stroke_28.png">
                </li>
            {% endfor %}
        </ul>
    </div>
    </div>
{% endblock %}

五、发布问答(继承base.html)。发布前必须先登录,发布问题后,问题在主页中显示。连接question.css、question.js(设置发表问题的条件)

{% extends'base.html' %}

{% block title %}
问答
{% endblock %}
{% block head %}
    <link rel="stylesheet" type="text/css" href="{{ url_for('static',filename='css/question.css') }}">
{% endblock %}
{% block main %}
    <div class="form-group">

    <div class="box">
        <form action="{{ url_for('question') }}" method="post">
        <h1>发布问答</h1>
        <div class="input_box">
            <label for="questionQuestion">问题</label>
            <textarea class="form-control1" rows="1" id="questionQuestion" name="title"></textarea></div>
        <div class="input_box">
            <label for="questionDetail">详情</label>
            <textarea class="form-control1" rows="5" id="questionDetail" name="detail"></textarea></div>

            <div id="error_box"><br></div>
        <div class="input_box">
        <button onclick="fnQuestion()">提交问题</button>
        </div>
            </form>
        </div>

    </div>
{% endblock %}

六、问答详情页(继承base.html)。点击发布的问题进入,可以发表评论。连接questiondetail.css

{% extends'base.html' %}

{% block title %}
    问答详情
{% endblock %}

{% block head %}
    <link rel="stylesheet" type="text/css" href="{{ url_for('static',filename='css/questiondetail.css') }}">
{% endblock %}

{% block main %}
    <div class="post">
    <div class="artical">
        <h1 style="text-align: center">{{ ques.title }}</h1>
        <br><small>用户:<a href="{{url_for('usercenter',user_id=ques.author_id,tag=2) }}">{{ques.author.username }} </a><span class="badge">{{ ques.create_time }}</span></small>
        <hr>
        <p class="lead">{{ ques.detail }}</p>
    </div>
        <form action="{{ url_for('comment') }}" method="post" style="align-content: inherit">
            <div class="sign-container">
                    <textarea class="form-controld" rows="8" id="QuestionDetail" name="new_comment"></textarea>
                    <input name="question_id" type="hidden" value="{{ ques.id }}"/>
                <br>
                <input type="submit" value="评论" style="float: right">
                <h4>评论({{ ques.comments|length }})</h4>
                <hr>
            </div>
        </form>
        <ul class="list-group" style="background-size: contain">
            {% for foo in ques.comments %}
            <li>
                <span class="glyphicon glyphicon-leaf" aria-hidden="true"></span>
                用户:<a href="{{ url_for('usercenter',user_id=foo.author_id,tag=1) }}" >{{ foo.author.username }}</a>
                <span class="badge">{{ foo.creat_time }}</span>
                <br>
                <p style="text-indent: 18px">{{ foo.detail }}</p>
            </li>
            {% endfor %}
    </ul>
    </div>
{% endblock %}

七、用户中心导航父模板(继承父模板)。连接userbase.css

{% extends'base.html' %}

{% block title %}
    个人中心
{% endblock %}

{% block head %}
    <style>
        .nav_ul li{
            list-style: none;
            float: left;
            margin: 10px;
        }
    </style>
    <link rel="stylesheet" type="text/css" href="{{ url_for('static',filename='css/userbase.css') }}">
{% endblock %}

{% block main %}
    <div class="list-container">
    <h1 style="text-align: center">{{ user.username }}</h1>
        <hr>
    <ul class="nav_ul">
        <li role="presentation"><a href="{{ url_for('usercenter',user_id=user.id,tag='1') }}">Questions</a> </li>
        <li role="presentation"><a href="{{ url_for('usercenter',user_id=user.id,tag='2') }}">Comments</a> </li>
        <li role="presentation"><a href="{{ url_for('usercenter',user_id=user.id,tag='3') }}">Info</a> </li>
    </ul>
    <br>



    {% block user %}{% endblock %}</div>
{% endblock %}

八、用户中心(继承usercenter)——问答、评论、个人信息(均继承用户中心父模板)。

{% extends'userbase.html' %}

{% block user %}
    <div class="page-header">
    <br>
    <h3>全部问答</h3>
    <br>
        <ul class="list-group" style="background-size: contain">
            {% for foo in user.question %}
            <li class="list-group-item">
                <span class="glyphicon glyphicon-leaf" aria-hidden="true"></span>
                <a href="#" target="_blank">{{ foo.author.username }}</a>
                <span class="badge">发布时间:{{ foo.create_time }}</span>
                <p style="text-indent: 18px">{{ foo.detail }}</p>
            </li>
            {% endfor %}
        </ul>
    </div>
{% endblock %}
{% extends'userbase.html' %}

{% block user %}
    <div class="page-header">
    <br>
        <h3>全部评论</h3>
    <br>
        <ul class="list-group" style="background-size: contain">
            {% for foo in user.comments %}
            <li class="list-group-item">
                <span class="glyphicon-leaf" aria-hidden="true"></span>
                <a href="#" target="_blank">{{ foo.author.username }}</a>
                <span class="badge">发布时间:{{ foo.creat_time }}</span>
                <p style="text-indent: 18px">{{ foo.detail }}</p>
            </li>
            {% endfor %}
        </ul>
    </div>
{% endblock %}
{% extends'userbase.html' %}

{% block user %}
    <div class="page-header">
    <br>
        <h3>个人信息</h3>
        <br>
        <ul class="list-group">
            <li class="list-group-item">用户:{{ user.username }}</li>
            <li class="list-group-item">编号:{{ user.id }}</li>
            <li class="list-group-item">昵称:{{ user.nickname }}</li>
            <li class="list-group-item">文章篇数:{{ user.question|length }}</li>
            <li class="list-group-item">评论数:{{ user.comments|length }}</li>
        </ul>
    </div>
{% endblock %}

九、搜索功能

@app.route('/search/')
def search():
    qu=request.args.get('q')
    ques=Question.query.filter(
        or_(
            Question.title.contains(qu),
            Question.detail.contains(qu)
        )
    ).order_by('-create_time')
    return render_template('index.html',questions=ques)

十、数据库情况。

from datetime import datetime
from werkzeug.security import generate_password_hash,check_password_hash
from exts import db

class User(db.Model):
    __tablename__='user'
    id=db.Column(db.Integer,primary_key=True,autoincrement=True)
    username=db.Column(db.String(20),nullable=False)
    _password=db.Column(db.String(200),nullable=False) #内部使用
    nickname=db.Column(db.String(50))

    @property
    def password(self):  #外部使用,取值
        return self._password

    @password.setter
    def password(self,row_password):#赋值
        self._password = generate_password_hash(row_password)

    def check_password(self,row_password):#密码验证
        result=check_password_hash(self._password,row_password)
        return result

class Question(db.Model):
    __tablename__='question'
    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)
    create_time=db.Column(db.DateTime,default=datetime.now)
    author_id=db.Column(db.Integer,db.ForeignKey('user.id'))
    author=db.relationship('User',backref=db.backref('question'))

class Comment(db.Model):
    __tablename__='comment'
    id=db.Column(db.Integer,primary_key=True,autoincrement=True)
    author_id=db.Column(db.Integer,db.ForeignKey('user.id'))
    question_id=db.Column(db.Integer,db.ForeignKey('question.id'))
    detail=db.Column(db.Text,nullable=False)
    creat_time=db.Column(db.DateTime,default=datetime.now)
    question=db.relationship('Question',backref=db.backref('comments',order_by=creat_time.desc))
    author=db.relationship('User',backref=db.backref('comments'))

posted @ 2018-01-05 15:32  088郑淑莹  阅读(451)  评论(0编辑  收藏  举报