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