期末作品检查

Posted 013洪辉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了期末作品检查相关的知识,希望对你有一定的参考价值。

个人学期总结

    经过一学期系统的学习,我已经能熟练运用基于Python的Flask框架web建设项目。Python是一种面向对象、直译式计算机程序设计语言,由Guido van Rossum于1989年底发明。第一个公开发行版发行于1991年。Python语法简捷而清晰,具有丰富和强大的类库。以下是我本学期的学习心得体会:

刚开始学的是简单的输入输出交互,例如输入两个数字计算出和,输入圆的半径求面积等等。其次是导入turtle库,用turtle来画图,后面学会了利用for循环来实现画图功能。再接下来是做字符串的基本操作,从简单到复杂(凯撒密码、GDP格式化输出、99乘法表)。刚开始的都比较简单,不过这也刚好能引起我的兴趣,毕竟太难的话谁也学不下去。我觉得我们需要大胆进行对例子里面参数的修改,对理解程序有极大好处,同时,你会有更多惊奇与激动的发现,这对学习python非常有好处。学习过程中,大家要尽量举一反三。比如结合第一章与第二、第三章的讲解,要能灵活运用input这个语句,并联想到条件循环,自己动手实现通过建立列表、字符串判断与查询以及结合if语句的应用进行布尔值真假判断最后输出正确变量,或者进行下一段可执行程序的编程。最后套用一句话总结 :编程百遍,其意自现!

Python+Flask+mysql的web建设技术过程:

首先是软件安装以及环境搭建,我使用的是pycharm这个软件来进行代码编写,数据库用的是Navicat for MySQL。还有装的python3以及MySQL 5.7 CommandLine Client 。

初学的是web基础,用html元素制作web页面。

制作自己的导航条。html头部元素,<base>  定义了页面链接标签的默认链接地址<style>  定义了HTML文档的样式<link>  定义了一个文档和外部资源之间的关系。还运用了图片导航栏,将图片放在nav里面。以下是代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>
        首页
        {% block logintitle %}{% endblock %}
        {% block registertitle %}{% endblock %}
        {% block wendatitle %}{% endblock %}
    </title>
    {% block loginhead %}{% endblock %}
    {% block registerhead %}{% endblock %}
    {% block wendahead %}{% endblock %}
    <link rel="stylesheet" href="/static/css/meihua.css"/>
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
</head>
<body id="myBody" style="background-color: lightcyan">
<nav>
    <img src="{{ url_for(\'static\',filename=\'image/gzsxy.png\') }}" width="2200px">
    <br>
    <script>
        document.write(Date())
    </script>
    <br>
    <a href="{{ url_for(\'moban\') }}" style="color: orange">首页</a>
    {% if username %}
        <a href="{{ url_for(\'usercenter\',user_id= session.get(\'id\'),tag =1) }}" style="color: orange">{{ username }}</a>
        <a href="{{ url_for(\'logout\') }}" style="color: orange">注销</a>
    {% else %}
        <a href="{{ url_for(\'login\') }}" style="color: orange">登录</a>
        <a href="{{ url_for(\'register\') }}" style="color: orange">注册</a>
    {% endif %}
    <a href="{{ url_for(\'wenda\') }}" style="color: orange">问答</a>
    <form action="{{ url_for(\'search\') }}" method="get">
        <input name="q" type="text" placeholder="请输入关键字">
        <button type="submit" style="color: orange">搜索</button>
    </form>
</nav>
<p style="color: gold">欢迎登陆{{ username }}</p>

<div class="list_container">
    <ul class="news-list">
        {% for foo in wenda %}
            <li class="list-group-item">
                <span class="glyphicon glyphicon-leaf" aria-hidden="true"></span>
                <a href="{{ url_for(\'usercenter\',user_id=foo.author_id,tag=3) }}"
                   style="color: brown">{{ foo.author.username }}</a>
                <br>
                <a href="{{ url_for(\'detail\',wenda_id= foo.id) }}" style="color: orange">{{ foo.title }}</a>
                <br>
                <span class="badge" style="color: mediumspringgreen">{{ foo.creat_time }}</span>
                <p style="color: magenta">{{ foo.detail }}</p>
                <span class="glyphicon glyphicon-user" aria-hidden="true"></span>
            </li>
        {% endfor %}

    </ul>

</div>
{% block loginbody %}{% endblock %}
{% block registerbody %}{% endblock %}
{% block wendabody %}{% endblock %}
</body>
</html>
<style>
div
{
    border:5px solid #a1a1a1;
    padding:10px 10px;
    background:#dddddd;
    width:500px;
    border-radius:25px;
}
</style>

下面是这代码运行出来后的样子

javascript 基础,登录验证

通过在script里面编写代码。来限制HTML里面登录注册等一系列的验证。以下是登录的javascript:

function fnLogin() {
    var oUname = document.getElementById("uname")
    var oUpass = document.getElementById("upass")

    var oError = document.getElementById("error_box")

    oError.innerHTML="<br>"
    if (oUname.value.length > 20 || oUname.value.length < 6) {
        oError.innerHTML = "请输入用户名6-20位字符"
       isErrer = false
        return isErrer;
    }else if ((oUname.value.charCodeAt(0)>=48)&&(oUname.value.charCodeAt(0)<=57)){
        oError.innerHTML="用户名首字母必须是字母"
       isErrer = false
        return isErrer;
    }else for(var i=0; i<oUname.value.length;i++){
        if((oUname.value.charCodeAt(i)<48)||(oUname.value.charCodeAt(i)>57)&&(oUname.value.charCodeAt(i)<97)||(oUname.value.charCodeAt(i)>122)){
            oError.innerHTML="用户名必须为字母或数字";
            isErrer = false
            return isErrer;
        }

    }

比如输入不正确的账号会弹出以下弹窗

完成登录与注册页面的前端:

进行HTML编写,使前端能够实现。并且与编写的JavaScript链接。以下是登录的html代码:

<form action="{{ url_for(\'login\') }}" method="post">
<script type="text/javascript" src="../static/js/login.js"></script>
    <div id="header" style="background-color: pink"><h2 align="center">登陆界面</h2></div>
    <div id="content">
        <p align="center">用户名:<input id="uname" type="text" name="user" placeholder="请输入账号">
        </p>
        <p align="center"> 密码:<input id="upass" type="password" name="psw" placeholder="请输入密码"></p>
        <input type="radio" value="stu">学生
        <input type="radio" value="tea">老师
        <br>
        <input type="checkbox" value="true">记住密码 <a href="">登陆遇到问题</a><br>
        <p align="center">
            <button type="submit" onclick="return fnLogin()">登录</button>
        </p>
    </div>
    <div id="footer" style="background-color: pink"><h3 align="center">版权所有@</h3></div>

注册的HTML代码:

<form action="{{ url_for(\'register\') }}" method="post">
<script type="text/javascript" src="../static/js/ma.js"></script>
    <div id="header" style="background-color: pink"><h2 align="center">注册界面</h2></div>
    <div id="content">
            <p align="center">用户名:<input id="uname" type="text" name="user" placeholder="请输入账号">
            </p>
            <p align="center"> 密码:<input id="upass" type="password" name="psw" placeholder="请输入密码"></p>
             <p align="center">密码:<input id="upass2" type="password" name="psw2" placeholder="请再次输入密码"></p>
            <input type="radio" value="stu">学生
            <input type="radio" value="tea">老师
            <br>
            <input type="checkbox" value="true">记住密码 <a href="">登陆遇到问题</a><br>
         <p align="center"><button type="submit" onclick=" return fnLogin()">注册</button></p>
</div>
           </form>
    <div id="footer" style="background-color: pink"><h3 align="center">版权所有@</h3></div>

这是实现后的图:

开始Flask项目:

为了能够在首页点击链接进入登录与注册页面,需要新建Flask项目。设置调试模式。理解Flask项目主程序。使用装饰器,设置路径与函数之间的关系。使用Flask中render_template,用不同的路径,返回首页、登录员、注册页。用视图函数反转得到URL,url_for(‘login’),完成导航里的链接。以下是python代码:

from flask import Flask,render_template

app = Flask(__name__)


@app.route(\'/\')
def hh():
    return render_template(\'login.html\')


@app.route(\'/login/\')
def h():
    return render_template(\'login.html\')


if __name__ == \'__main__\':
    app.run(debug=True)

连接mysql数据库,创建用户模型:

有登录页面和注册页面,就需要链接自己的数据库,创建用户模型。使数据库上能存记录,下次登录可以不用注册。以下是创建用户模型的python代码:

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), nullable=True)
class Wenda(db.Model):
    __tablename__ = \'wenda\'
    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\'))
    author = db.relationship(\'User\', backref=db.backref(\'wenda\'))

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\'))
    wenda_id = db.Column(db.Integer, db.ForeignKey(\'wenda.id\'))
    creat_time = db.Column(db.DateTime, default=datetime.now)
    detail = db.Column(db.Text, nullable=False)
    wenda = db.relationship(\'Wenda\', backref=db.backref(\'comment\',order_by=creat_time.desc))
    author = db.relationship(\'User\', backref=db.backref(\'comments\'))

创建数据库时还需要配置文I件,这是配置代码:

debug = True
SQLALCHEMY_DATABASE_URI=\'mysql+pymysql://root:123456@localhost:3306/hhh?charset=utf8\'
SQLALCHEMY_TRACK_MODIFICATIONS=False
import os
SECRET_KEY=os.urandom(24)

 

这是创建成功后的样子:

通过用户模型,对数据库进行增删改查操作

有了数据库,我们难免需要对数据进行增删查改。

数据添加
user=User(username=\'ma\',password=\'gg\')
db.session.add(user)
db.session.commit()


数据更新

user = User.query.filter(User.username==\'hh\').first()
user.password=\'gg\'
db.session.commit()


数据查询
user = User.query.filter(User.username==\'ma\').first()
print(user.username,user.password)

数据删除
user = User.query.filter(User.username==\'ma\').first()
db.session.delete(user)
db.session.commit()

完成注册功能:

接下来就是利用python实现注册,使数据库有记录。还需要辨别是否数据库里有重名的,重名的话就创建失败

@app.route(\'/register/\', methods=[\'GET\', \'POST\'])  # 跳转注册,methods定义它有两种请求方式
def register():
    if request.method == \'GET\':
        return render_template(\'register.html\')
    else:

        username = request.form.get(\'user\')
        password = request.form.get(\'psw\')
        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)
            db.session.add(user)
            db.session.commit()
            return redirect(url_for(\'login\'))

这是注册成功的图:

完成登录功能,用session记住用户名

注册了之后,我们就需要登录‘。登录完还要在页面显示自己的用户名。’用session记住用户名,然后回首页的HTML里增加判断语句,看是否已经登录,登录的话显示用户名和注销,没登录显示登录和注册。

这是登录的python代码:

@app.route(\'/login/\', methods=[\'GET\', \'POST\'])  # 跳转登陆,methods定义它有两种请求方式
def login():
    if request.method == \'GET\':
        return render_template(\'login.html\')
    else:
        username = request.form.get(\'user\')
        password = request.form.get(\'psw\')
        user = User.query.filter(User.username == username).first()  # 判断用户名是否存在
        if user:
           if user.check_password(password) :
               session[\'user\']=username
               session[\'id\']=user.id
               session.permanent = True
               return redirect(url_for(\'moban\'))
           else:
               return \'密码错误\'
        else:
            return \'用户名不存在\'

这是首页的HTML代码:

  {% if username %}
        <a href="{{ url_for(\'usercenter\',user_id= session.get(\'id\'),tag =1) }}" style="color: orange">{{ username }}</a>
        <a href="{{ url_for(\'logout\') }}" style="color: orange">注销</a>
    {% else %}
        <a href="{{ url_for(\'login\') }}" style="color: orange">登录</a>
        <a href="{{ url_for(\'register\') }}" style="color: orange">注册</a>
    {% endif %}

这是实现后的图:

 

发布功能完成

现在有了账户,就可以干一些其他事情,比如发布问题。首先制作发布问题的HTML文件,然后再主py文件内,编写发布问题的代码。然后让你发布的问题在首页显示,而且发布的问题多了,可以让它按发布的时间来排序。这个就需要在首页的html文件里面编写

这是发布问题的html代码:

    <form action="{{ url_for(\'wenda\') }}" method="post">
    <div class="from-group">
        <label for="gb" style="color: orange"> 标题 </label><br>
        <textarea class="from-control" cols="50" rows="1" id="gb" name="title"></textarea>
    </div>
    <div class="from-group">
        <label for="gb1" style="color: orange"> 详情</label><br>
        <textarea class="from-control" cols="50" rows="8" id="gb1" name="detail"></textarea

以上是关于期末作品检查的主要内容,如果未能解决你的问题,请参考以下文章

期末作品检查

期末作品检查

期末作品检查

期末作品检查

期末作品检查

期末作品检查