• 期末作品检查


    一、个人学期总结

        在经过一个学期的管理信息系统的学习我接触到了python这门全新的语言。相比较于以前学习的java语言来说,python的学习让我充满兴趣和学习欲望。首先python语言简单,很容易入手。功能实现所需要的代码非常精简。不用花费时间去打很多代码。实现出的功能让我有成就感。

      在管理信息系统的前半学期时间学习了许多python的基础功能。了解了许多第三方库,像是datebaseturtlejieba等。展现出画图、时间、词频统计等等。后半学期学习了论坛的网页制作,首先学习了前端页面css效果的显示让页面显示的美观大方。还学习了网页继承,让我们可以继承父模板减少了工作量。

        后期连接数据库进行数据的调用传输。学习了注册、登录、发布问答、个人中心、详情页、密码保护、模型分离等功能。其中利用后台主py文件进行功能实现,再到页面上进行连接赋值完成整个论坛网页的制作。python的功能非常庞大,具有大量的第三方库。被称为胶水语言,不仅可以用来制作网页,还可以用来做数据挖掘。前景十分好。在最后感谢杜云梅老师本学期的教导,让我很好的进入到python这门课程,让我学习到了很多东西。在今后的学习生活中我也会继续学习python,为今后的生活工作打下基础。

    二、Python+Flask+MysqL的web建设技术过程总结

    1.web建设的使用工具

    工具:pycharm+mysql+Python+Navicat for mysql

    2.基础界面展示

    ①导航栏

    ②首页

    ③登录界面and注册界面

    ④发布问答and问答详情页

    ⑥个人中心页面

    3.第三方库导入与数据库的连接

    复制代码
    from flask import Flask
    from flask import render_template, request, redirect, url_for, session
    import config, os
    from functools import wraps
    from flask_sqlalchemy import SQLAlchemy
    from datetime import datetime
    from sqlalchemy import or_,and_
    from werkzeug.security import generate_password_hash,check_password_hash
    复制代码
    app = Flask(__name__)
    app.config.from_object(config)
    db = SQLAlchemy(app)
    
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:19940224@localhost:3306/mis_db?charset=utf8'
    SQLALCHEMY_TRACK_MODIFICATIONS = False

    4、数据库表的建立与增删查改功能

    复制代码
    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(20), nullable=True)
    
        @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 Ques(db.Model):
        __tablename__ = 'question'
        id = db.Column(db.Integer, primary_key=True, autoincrement=True)
        author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
        author = db.relationship('User', backref=db.backref('question'))
        title = db.Column(db.String(20), nullable=False)
        detail = db.Column(db.Text, nullable=False)
        creat_time = db.Column(db.DateTime, default=datetime.now)
    
    
    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'))
        creat_time = db.Column(db.DateTime, default=datetime.now)
        detail = db.Column(db.Text, nullable=False)
        question = db.relationship('Ques', backref=db.backref('comment', order_by=creat_time.desc))
        author = db.relationship('User', backref=db.backref('comment'))
    
    
    class Dianzan(db.Model):
        __tablename__ = 'dianzan'
        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'))
        question = db.relationship('Ques', backref=db.backref('dianzan'))
        author = db.relationship('User', backref=db.backref('dianzan'))
    db.create_all()
    复制代码
    复制代码
    # 增加
    # user=User(username='yujiujiu2',password='11111',nickname='123456')
    # db.session.add(user)
    # db.session.commit()
    # 查询
    # user=User.query.filter(User.username =='yujiujiu2').first()
    # print(user.username,user.password,user.nickname)
    # 删除
    # user=User.query.filter(User.username =='vixx').first()
    # db.session.delete(user)
    # db.session.commit()
    # 修改
    # user=User.query.filter(User.username =='vixx').first()
    # user.password='123456789'
    # db.session.commit()
    复制代码

    5、登录与注册功能的实现

    主py文件(后台功能的实现):

    复制代码
    # 注册
    @app.route('/regist', methods=['GET', 'POST'])
    def regist():
        if request.method == 'GET':
            return render_template('regist.html')
        else:
            username = request.form.get('username')
            password = request.form.get('password')
    
            user = User.query.filter(User.username == username).first()
            # 判断用户名是否存在
            if user:
                return u'账号已存在'
            else:
                user = User(username=username, password=password)
                db.session.add(user)
                db.session.commit()
                return redirect(url_for('login'))
    
    # 登录
    @app.route('/login/', methods=['GET', 'POST'])
    def login():
        if request.method == 'GET':
            return render_template('login.html')
        else:
            username = request.form.get('username')
            password = request.form.get('password')
            user = User.query.filter(User.username == username).first()
            # 判断用户名是否存在
            if user:
                if user.check_password(password):
                    session['user'] = username
                    session['userid']=user.id
                    session.permanent = True
                    return redirect(url_for('index'))
                else:
                    return u'密码错误'
            else:
                return u'账号不存在'
    复制代码

    页面获取数据

    复制代码
    {#登录#}
                <form action="{{ url_for('login') }}" method="post">
                    <div align="center">username:<input id="user" type="text" name="username" placeholder="请输入用户名"></div>
                    <br>
                    <div align="center"> password:<input id="upass" type="password" name="password" align="center"><br>
                    </div>
                    <div align="center">
                        <button type="submit" onclick=" return fuck()">登录</button>
                        <input type="button" value="cancel"><br>
                    </div>
                    <div align="center">
                        <div id="error_box"></div>
                        <br>
                    </div>
                </form>
    复制代码
    复制代码
    {#注册#}
                <form action="{{ url_for('regist') }}" method="post">
                    <div align="center"> 账号注册:<input id="uname" type="text" name="username" placeholder="请输入用户名"><br></div>
                    <div align="center"> 注册密码:<input id="upass" type="password" name="password" placeholder="请输入密码"><br>
                    </div>
                    <div align="center"> 确认密码:<input id="upass1" type="password" name="password1" placeholder="请确认密码"></div>
                    <div align="center">
                        <div>
                            <button type="submit" onclick="return zhuce()">注册</button>
                            <input type="button" value="cancel"><br>
                        </div>
                    </div>
                    <div align="center">
                        <div id="error_box"></div>
                        <br>
                    </div>
                </form>
    复制代码

    6、问答详情页与发布评论

    主py文件实现功能

    复制代码
    # 问答详情页
    @app.route('/detail/<question_id>', methods=['GET', 'POST'])
    def detail(question_id):
        quest = Ques.query.filter(Ques.id == question_id).first()
        comments = Comment.query.filter(Comment.question_id == question_id).all()
        dzyes = Dianzan.query.filter(  # dzyes用在用户详情页判断是否已点赞的按钮
            and_(
                Dianzan.author_id == session.get('userid'), Dianzan.question_id == question_id
            )
        ).first()
        return render_template('detail.html', quest=quest,comments=comments,dzyes=dzyes)
    复制代码
    复制代码
    # 评论
    @app.route('/comment',methods=['POST'])
    @loginFirst
    def comment():
        comment =request.form.get('new_comment')
        question_id=request.form.get('question_id')
        auth_id=User.query.filter(User.username==session.get('user')).first().id
        comm = Comment(author_id=auth_id,question_id=question_id,detail=comment)
        db.session.add(comm)
        db.session.commit()
    复制代码

    页面显示传输数据

    复制代码
    {% extends 'index.html' %}
    {% block registertitle %} 内容{% endblock %}
    {% block registerhead %}
        <script type="text/javascript" src="../static/js/js.js"></script>{% endblock %}
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
    <link rel="stylesheet" type="text/css" href="../static/css/webb.css">
    <base href="www.gzcc.cn" target="_blank">
    
    
    
    {% block body %}
        <div class="container" align="">
            <div class="row clearfix">
                <div class="col-md-3 column">
                </div>
                <div class="col-md-6 column">
                    <h3 align="center">{{ quest.title }}</h3>
                    <div align="center" style="font-weight: 900 ">
                        {#                    <span style="color: red">作者:{{ quest.author.username }}&nbsp;时间:{{ quest.creat_time }}</span>#}
                        <span class="badge">作者:{{ quest.author.username }}&nbsp;&nbsp;发布时间:{{ quest.creat_time }}</span>
                    </div>
                    <div class="panel panel-default">
                        <div class="panel-body" style="font-size:large">
                            &nbsp;&nbsp; &nbsp;{{ quest.detail }}
                            <form action="{{ url_for('dianzan',question_id=question_id) }}" method="post">
                                <input type="hidden" name="question_id" value="{{ quest.id }}">
                                <input type="hidden" name="author_id" value="{{ userid }}">
                                {% if dzyes %}
                                    <button type="button" class="btn btn-default btn-xs pull-right"><span
                                            class="glyphicon glyphicon-heart">{{ quest.dianzan |length }}</span></button>
                                {% else %}
                                    <button type="submit" class="btn btn-success btn-xs pull-right"><span
                                            class="glyphicon glyphicon-heart-empty">赞</span></button>
                                {% endif %}
                            </form>
                            <span class=""></span><em>点赞:{{ quest.dianzan|length }}</em>
                        </div>
                    </div>
                    {#                    <div align="right">#}
                    {#                        <form action=""></form><a href="" style="font-size: medium">点赞</a></div>#}
                    {#                </div>#}
    
    
    
                    <h4>评论:({{ quest.comment|length }})</h4>
                    {% for foo in comments %}
                        <div class="panel panel-default">
                            <div class="panel-body">
                                    <span><a
                                            href="{{ url_for('usercenter',user_id=foo.author.id,tag='1') }}">{{ foo.author.username }}</a>&nbsp;&nbsp;&nbsp;时间:{{ foo.creat_time }}</span><br>
                                <span style="font-size: medium">&nbsp;&nbsp;{{ foo.detail }}</span>
                            </div>
                        </div>
                    {% endfor %}
    
                <h4>发布评论</h4>
                <div>
                        <form action="{{ url_for('comment') }}" method="post">
                            <textarea name="new_comment" id="new_comment" cols="90" rows="5"></textarea>
                            <input id="question_id" name="question_id" type="hidden" value="{{ quest.id }}">
                            <button type="submit">发布</button>
                        </form>
                    </div>
                    <div class="col-md-3 column">
                    </div>
    
                </div>
            </div>
    
        </div>
    {% endblock %}
    复制代码

    7、个人中心

    主py文件的功能实现

    复制代码
    @app.route('/usercenter/<user_id>/<tag>')
    @loginFirst
    def usercenter(user_id,tag):
        user=User.query.filter(User.id==user_id).first()
        context={
            'username_id': user.id,
            'username':user.username,
            'questions':user.question,
            'comments':user.comment
        }
        if tag == '1':
            return render_template('usercenter.html',**context)
        elif tag == '2':
            return render_template('all_question.html', **context)
        else:
            return render_template('all_comment.html', **context)
    复制代码

    父模板user

    复制代码
    {% extends"index.html" %}
    {% block logintitle %}个人中心{% endblock %}
    {% block loginhead %}
        <style>
            .nav_ul li {
                list-style: none;
                float: left;
                margin: 10px;
            }
        </style>
    
    {% endblock %}
    {% block body %}
        <div class="container">
            <div class="row clearfix">
                <div class="col-md-2 column">
                </div>
                <div class="col-md-8 column" id="rgba1">
    
                    <ul class="nav_ul">
                        <li role="presentation"><a href="{{ url_for('usercenter',user_id = username_id,tag='2') }}">全部问答</a>
                        </li>
                        <li role="presentation"><a href="{{ url_for('usercenter',user_id = username_id,tag='3') }}">全部评论</a>
                        </li>
                        <li role="presentation"><a href="{{ url_for('usercenter',user_id = username_id,tag='1') }}">个人信息</a>
                        </li>
                    </ul>
                    <br>
                    {% block user %}{% endblock %}
                </div>
                <div class="col-md-2 column">
                </div>
            </div>
        </div>
    {% endblock %}
    复制代码

    所有问答

    复制代码
    {% extends"index.html" %}
    {% block logintitle %}个人中心{% endblock %}
    {% block loginhead %}
        <style>
            .nav_ul li {
                list-style: none;
                float: left;
                margin: 10px;
            }
        </style>
    
    {% endblock %}
    {% block body %}
        <div class="container">
            <div class="row clearfix">
                <div class="col-md-2 column">
                </div>
                <div class="col-md-8 column" id="rgba1">
    
                    <ul class="nav_ul">
                        <li role="presentation"><a href="{{ url_for('usercenter',user_id = username_id,tag='2') }}">全部问答</a>
                        </li>
                        <li role="presentation"><a href="{{ url_for('usercenter',user_id = username_id,tag='3') }}">全部评论</a>
                        </li>
                        <li role="presentation"><a href="{{ url_for('usercenter',user_id = username_id,tag='1') }}">个人信息</a>
                        </li>
                    </ul>
                    <br>
                    {% block user %}{% endblock %}
                </div>
                <div class="col-md-2 column">
                </div>
            </div>
        </div>
    {% endblock %}
    复制代码

    所有评论

    复制代码
    {% extends 'user.html' %}
    {% block user %}
    {#<div class="container">#}
    {#    <div class="row clearfix">#}
    {#        <div class="col-md-2 column">#}
    {#        </div>#}
    {#        <div class="col-md-8 column"  id="rgba1">#}
    {##}
    
            <hr>
            <h3 align="center">
                <small>全部评论</small>
            </h3>
            <ul class="list-unstyled">
                {% for foo in comments %}
                    <li class="list-group-item">
    
                        <span class="badge pull-right">{{ foo.create_time }}</span>
                        <p>文章标题:{{ foo.question.title }}</p>
                        <p>评论内容:{{ foo.detail }}</p>
                        <span class="glyphicon glyphicon-user"></span><small ><a>{{ foo.author.username }}</a></small>
                        <br>
                    </li>
                {% endfor %}
            </ul>
    {#        </div>#}
    {#        <div class="col-md-2 column">#}
    {#        </div>#}
    {#    </div>#}
    {#</div>#}
    {% endblock %}
    复制代码

    个人中心

    复制代码
    {% extends 'user.html' %}
    {% block user %}
    {#    <div class="container">#}
    {#        <div class="row clearfix">#}
    {#            <div class="col-md-2 column">#}
    {#            </div>#}
    {#            <div class="col-md-8 column" id="rgba1">#}
                    <p class="text-center">
                        <small>{{ username }}</small>
                    </p>
                    <hr>
                    <h3 align="center">
                        <small>个人信息</small>
                    </h3>
                    <ul class="list-group">
                        <li class="list-group-item" style=" line-height: 1.5 !important;">><span class="glyphicon glyphicon-user"></span>用户:{{ username }}</li>
                        <li class="list-group-item" style=" line-height: 1.5 !important;">>昵称</li>
                        <li class="list-group-item" style=" line-height: 1.5 !important;">>文章篇数:{{ questions|length }}</li>
                        <li class="list-group-item" style=" line-height: 1.5 !important;">><a href="{{ url_for('password_update',user_id=username_id) }}">修改密码</a></li>
                    </ul>
    {#            </div>#}
    {#            <div class="col-md-2 column">#}
    {#            </div>#}
    {#        </div>#}
    {#    </div><br>#}
    {% endblock %}
    复制代码

    8、搜索功能

    主py文件

    复制代码
    @app.route('/search/',methods=['GET','POST'])
    def search():
        search = request.args.get('search')
        question = Ques.query.filter(
            or_(
                Ques.title.contains(search),
                Ques.detail.contains(search)
            )
    
        ).order_by('-creat_time')
    
        return render_template('index.html',question=question)
    复制代码

    页面传输显示

     <form class="navbar-form navbar-left" action="{{ url_for('search') }}" method="get" role="search">
                    <div class="form-group">
                        <input type="text" class="form-control" name="search" placeholder="Search">
                    </div>
                    <button type="submit" class="btn btn-default">搜索</button>
                </form>

    9、密码保护

    复制代码
      @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
    复制代码
  • 相关阅读:
    tomcat容器启动的启动过程(三)
    tomcat源码分析(二)启动过程
    tomcat源码分析(一)
    spring 整合redis
    redis win版安装
    java虚拟机存储区
    java代码块 静态、非静态
    Vulkan Tutorial 08 交换链
    Vulkan Tutorial 07 Window surface
    Vulkan Tutorial 06 逻辑设备与队列
  • 原文地址:https://www.cnblogs.com/951111ldj/p/8231773.html
Copyright © 2020-2023  润新知