我的學期總結css
在本學期學習python語言的過程當中,遇到過不少的問題和困難,所幸能夠獲得老師和同窗們的幫助。時光像水中的倒影,一晃一學期就過去了。昨日那埋怨時間過的太慢的情素彷佛還遊移在腦際,而今大三下學期的生活正在向咱們走來,驀然回首,感慨頗多。剛邁入大學的時候對一切彷佛都充滿新鮮感,因而處處躍躍欲試,結果碰壁較多,吃一塹長一智,大一大二除了努力完成本身的學習目標也利用各類活動豐富本身的生活擺脫如今大學生最流行的鬱悶日子。html
剛開始學習管理信息系統的時候,覺得這是一門很簡單的科目,是偏文字的科目,日常靠看看背背就完事了,學起來才發現是徹底不同,從上課的第一天到如今,不知不覺已經發表了接近40篇的博客,一開始不太瞭解這門課的實際意義在哪裏,包括在作做業的時候也不太瞭解,逐漸地,在系統一步步完善的同時,也開始發現這門課有什麼奧妙,日常以爲別人的網頁別人的網站很拉風很好python
看,爲何能夠本身作出導航、登陸註冊、我的中心等頁面呢,直到本身也根據老師說的一步步作出來以後才發現,其實我本身也能夠作得出來,從一開始的以爲完成基本做業,把功能實現出來到後來開始追求完美,不管樣式、排版都要作好,這一個也是學習的過程。mysql
一個學期說長不長,說短也不短,多是在忙碌和充實中度過,因此以爲這個學期過得特別的快,也過得特別的有意義,學到了不少非計算機專業學不到的知識,也開始以爲其實互聯網的奧妙是在於如何深刻學習,一個學期以來,作了不少做業,在做業上遇到不少不同的問題和難題,可是每次老師都會耐心解答,同時也感謝創客的同窗教會我不少不同的知識,學習計算機的道路很漫長,因此我知道,每一個人都在努力。sql
學習過程:數據庫
1、使用軟件flask
from flask import Flask,render_template app=Flask(__name__) @app.route('/') def base(): return render_template('base.html') @app.route('/login/') def login(): return render_template('denglu.html') @app.route('/signin/') def zhuce(): return render_template('zhuce.html') if __name__=='__main__': app.run(debug=True) 複製代碼 複製代碼 <html lang="en"> <head> <meta charset="UTF-8"> <title>廣州商學院</title> <nav> <img src="http://img.zcool.cn/community/019f9c5542b8fc0000019ae980d080.jpg@1280w_1l_2o_100sh.jpg" width="50"height="50"> <a href="http://www.gzcc.cn/">首頁</a> <a href="http://127.0.0.1:5000/login/">登陸</a> <a href="http://127.0.0.1:5000/signin/">註冊</a> <input type="text"> <button>search</button> </nav> <link rel="stylesheet" type="text/css" href="../static/css/daohang.css"> </head> <body> <h1 class="zao">廣州商學院</h1> <h2 >2017</h2> <h3><span id="commentcount" >天天新鮮事</span></h3> <div id="2015"style="width: 400px"> <div id="header"style="background-color: pink":><h2 align="center "style="margin-bottom: 0">登陸</h2></div> <div id="content"style="background-color: palevioletred;height:150px;width: 400px;float: left"> <from action=""> Username:<input type="text"name="user"placeholder="用戶名"><br> Passward:<input type="password"name="password"><br> <input type="radio"name="role"value="stu">student <input type="radio"name="role"value="tea">teacher<br> <input type="checkbox"value="true"><span>記住我</span><a href="">登陸遇到的問題</a><br> <input type="button"value="login"onclick="alert('登陸驗證')"> </from> </div> </div> <hr> <div> <select> <br><option>收藏</option> <br> <option>點贊</option> <br> <option>評論</option> </select> <hr><br> <br> <h3 id="學院介紹">學院介紹</h3> <d1> <br><dt><a href="http://site.gzcc.cn/">信息技術與工程學院</a> </dt> <br> <dt><a href="http://st.gzcc.cn/">旅遊學院</a> </dt> <br><dt><a href="http://sfl.gzcc.cn/">外國語學院</a></dt> <br> <dt><a href="http://sl.gzcc.cn/">法學院</a></dt> </d1> <hr><br> </div>
3、夜間模式、父模板製做app
<!DOCTYPE html> <html lang="en"xmlns:color="http://www.w3.org/1999/xhtml"> <head> <meta charset="UTF-8"> <title>夜間模式</title> <script> function mySwitch() { var myele=document.getElementById("on_off") if(myele.src.match("bulboff")) { myele.src="http://www.runoob.com/images/pic_bulbon.gif" document.getElementById("myBody").style.background="black" document.getElementById("demo").style.color="white" } else { myele.src="http://www.runoob.com/images/pic_bulboff.gif" document.getElementById("myBody").style.background="white" document.getElementById("demo").style.color="black" } } </script> </head> <body id="myBody"> <img id="on_off"onclick="mySwitch()"src="http://www.runoob.com/images/pic_bulboff.gif"width="50px"> <p id="demo">ppppppp</p> <script> document.write(Date()) document.getElementById("demo").innerHTML=Date()</script> <button type="button" onclick=window.alert("!")>date</button>
4、加載靜態文件,父模板的繼承與擴展佈局
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{% block title %}{% endblock %}base</title> <link rel="stylesheet" href="../static/css/0082.css" type="text/css"> <script src="../static/js/0082.js"></script> {% block head %}{% endblock %} </head> <body id="myBody"> {% block main %}{% endblock %} <nav> <div class="layui-col-md4"> <div class="layui-row" style="padding-top:10px;"> <img id="myOnOff" onclick="myswitch()" src="http://www.runoob.com/images/pic_bulbon.gif" width="40px" style="padding-left: 10px;"> <a href="{{ url_for('base')}}">首頁</a> <a href="{{ url_for('login')}}">登陸</a> <a href="{{ url_for('signin')}}">註冊</a> </div> </div> <br> <form method="get" action="#"> <div class="layui-row"> <div class="layui-col-md3" style="padding-left: 50px;"> <input type="text" name="title" required lay-verify="required" placeholder="search" autocomplete="off" class="layui-input"> </div> <div class="layui-col-md3" style="padding-left: 50px;"> <button type="submit" class="layui-btn layui-btn-primary">搜索</button> </div> </div> </form> </nav> <div class="area"> </div>
5、鏈接數據庫,建立用戶類型
from flask import Flask from flask_sqlalchemy import SQLAlchemy import config app = Flask(__name__) app.config.from_object(config) db=SQLAlchemy(app) 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(20), nullable=False) nickname = db.Column(db.String(20)) db.create_all() @app.route('/') def hello_world(): return 'Hello World!' if __name__ == '__main__': app.run() 複製代碼 SQLALCHEMY_DATABASE_URI='mysql+pymysql://root:@127.0.0.1:3306/test?charset=utf8' SQLALCHEMY_TRACK_MODIFICATIONS = False
6、完成註冊功能
from flask import Flask,render_template,request,redirect,url_for from flask_sqlalchemy import SQLAlchemy import config app = Flask(__name__) app.config.from_object(config) db=SQLAlchemy(app) 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(20), nullable=False) nickname = db.Column(db.String(20)) db.create_all() # user=User(username='mis1234',password='111111') # db.session.add(user) # db.session.commit() @app.route('/',methods=['GET','POST']) def register(): if request.method=='GET': return render_template('登陸.html') else: username=request.form.get('username') passward=request.form.get('passward') nickname=request.form.get('nickname') user=User.query.filter(User.username==username).first() if user: return 'username existed' else: user=User(username=username,passward=passward,nickname=nickname) db.session.add(user) db.session.commit() return redirect(url_for('登陸')) @app.route('/load',methods=['GET','POST']) def load(): if request.method == 'GET': return render_template('登陸.html') @app.route('/') def base(): return render_template('base.html') @app.route('/login/') def login(): return render_template('登陸.html') @app.route('/signin/') def signin(): return render_template('zhuce.html') @app.route('/fabu/') def fabu(): return render_template('發佈.html') if __name__=='__main__': app.run(debug=True) if __name__ == '__main__': app.run()
7、完成登陸功能
from flask import Flask,render_template,request,redirect,url_for from flask_sqlalchemy import SQLAlchemy import config app = Flask(__name__) app.config.from_object(config) db=SQLAlchemy(app) 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(20), nullable=False) nickname = db.Column(db.String(20)) db.create_all() # user=User(username='mis1234',password='111111') # db.session.add(user) # db.session.commit() @app.route('/') def base(): return render_template("base.html") @app.route('/login/', methods=['GET', 'POST']) def login(): if request.method == 'GET': return render_template("denglu.html") else: username = request.form.get('username') password = request.form.get('password') user = User.query.filter(User.username == username).first() if user: if user.password == password: return redirect(url_for('base')) else: return '密碼錯誤' else: return '用戶名不存在' @app.route('/regist/', methods=['GET', 'POST']) def zhuce(): if request.method == 'GET': return render_template("zhuce.html") else: username = request.form.get('username') password = request.form.get('password') nickname = request.form.get('nickname') user = User.query.filter(User.username == username).first() if user: return '用戶名已存在' else: user = User(username=username, password=password, nickname=nickname) db.session.add(user) # 數據庫,添加操做 db.session.commit() return redirect(url_for('login')) @app.route('/fabu/') def fabu(): return render_template('question.html') if __name__=='__main__': app.run(debug=True) 複製代碼 複製代碼 {% extends'fumoban.html' %} <html> <head> <meta charset="UTF-8"> <title>登陸</title> {% block head %} <link href="../static/css/zhuce.css" rel="stylesheet" type="text/css"> <script src="../static/js/denglu.js"></script> {% endblock %} </head> <body> {% block main %} <div><h1>用戶登陸</h1></div> <form action="{{ url_for('login') }}" method="post"></form> <div class="aa"><script>document.write("loading....")</script> </div> <div class="flex-container"> <form class="form" method="post" action="{{ url_for('login') }}"> <div class="box"> <div class="input_box"> 登陸 <input id="uname" name='username'type="text" placeholder="輸入用戶名"> </div> <br> <div class="input_box"> 密碼 <input id="upass" name='password'type="password" placeholder="輸入密碼"> </div> <br> <div id="error_box"><br></div> <div class="input_box"> <button onclick="fnLogin()">登陸</button> </div> </div> </form> </div> {% endblock %} </body> </html>
8、登錄後更新導航
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{% block title %}{% endblock %}base</title> <link rel="stylesheet" href="../static/css/base.css" type="text/css"> <script src="../static/js/base.js"></script> {% block head %}{% endblock %} </head> <body id="myBody"> {% block main %}{% endblock %} <nav> <div class="qwe"> <div class="qwe" style="padding-top:10px;"> <img id="myOnOff" onclick="myswitch()" src="http://www.runoob.com/images/pic_bulbon.gif" width="40px"> {% if username %} <li><a href="#">{{ username }}</a></li> <li style="float:left"><a href="{{ url_for('base') }}">註銷</a></li> {% else %} <li style="float:left"><a href="{{ url_for('login') }}">登錄</a></li> <li style="float:left"><a href="{{ url_for('zhuce') }}">註冊</a></li> {% endif %} <li style="float:left"><a href="{{ url_for('base')}}">首頁</a></li> <li style="float:left"><a href="{{ url_for('fabu')}}">發佈</a></li> </div> </div> <br> <form method="get" action="#"> <div class="qwe1"> <div class="qwe2" style="padding-left: 50px;"> <input type="text" name="title" required lay-verify="required" placeholder="search" autocomplete="off" class="layui-input"> </div> <div class="qwe3" style="padding-left: 50px;"> <button type="submit" class="layui-btn layui-btn-primary">搜索</button> </div> </div> </form> </nav> </body> </html><!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{% block title %}{% endblock %}base</title> <link rel="stylesheet" href="../static/css/base.css" type="text/css"> <script src="../static/js/base.js"></script> {% block head %}{% endblock %} </head> <body id="myBody"> {% block main %}{% endblock %} <nav> <div class="qwe"> <div class="qwe" style="padding-top:10px;"> <img id="myOnOff" onclick="myswitch()" src="http://www.runoob.com/images/pic_bulbon.gif" width="40px"> {% if username %} <li><a href="#">{{ username }}</a></li> <li style="float:left"><a href="{{ url_for('base') }}">註銷</a></li> {% else %} <li style="float:left"><a href="{{ url_for('login') }}">登錄</a></li> <li style="float:left"><a href="{{ url_for('zhuce') }}">註冊</a></li> {% endif %} <li style="float:left"><a href="{{ url_for('base')}}">首頁</a></li> <li style="float:left"><a href="{{ url_for('fabu')}}">發佈</a></li> </div> </div> <br> <form method="get" action="#"> <div class="qwe1"> <div class="qwe2" style="padding-left: 50px;"> <input type="text" name="title" required lay-verify="required" placeholder="search" autocomplete="off" class="layui-input"> </div> <div class="qwe3" style="padding-left: 50px;"> <button type="submit" class="layui-btn layui-btn-primary">搜索</button> </div> </div> </form> </nav> </body> </html>
9、發佈功能完成
def fabu(): return render_template('question.html') {% extends 'base.html' %} {% block title %}問答{% endblock %} {% block head %} <meta charset="UTF-8"> <link type="text/css" rel="stylesheet" href="../static/css/question.css"> {% endblock %} {% block main %} <form action="{{ url_for('fabu') }}" method="post"> <div class="label"> <h1 style="color:pink",align="center"> 發佈問答</h1> <div class="q"> <label for="question">問題</label> <textarea id="question" cols="50" rows="1"></textarea> </div> <div class="form-group"> <label for="questionDetail">詳情</label> <textarea class="form-control" id="questionDetail" cols="50" rows="5"></textarea><br> <input type="checkbox" name="c1" id="c1" value="">記住我<br> </div> <br> <div class="input-area"> <button onclick="fnQuestion">發佈問答</button> </div> </div> </form> {% endblock %}
10、首頁列表顯示所有問答,完成問答詳情頁佈局
@app.route('/') def base(): context = { 'questions': Question.query.all() } return render_template("base.html",**context) {% for foo in questions %} <ul class="list-group"> <li class="list-group-item"> <span class="glyphicon glyphicon-leaf" aria-hidden="true"></span> <a href="detail.html">{{foo.author.username}}</a> <br> <a href="#">{{ foo.title }}</a><br> <span class="badge">{{ foo.creat_time }}</span><br> <p style="color:black">{{ foo.detail}}</p><br> </li> {% endfor %} </ul> </div> </head> <body id="body"> <div class="essayAera"> <ul class="list-group"> <li><a class="author" href="">做者名</a></li> <br> <li> <a class="title" href="">標題名</a></li> <br> <li> <span >建立時間</span></li> <li><p class="abstract">內容明細</p></li> <form action=""> <div class="form-group"> <textarea class="inputFramework"cols="50" rows="6" id="details" name="detail"></textarea> </div> <button type="submit" class="btn btn-default">發送</button> </form> </ul> </div> </body> </html>
11、從首頁問答標題到問答詳情
@app.route('/detail/<question_id>') def detail(question_id): quest= Question.query.filter(Question.id == question_id).first() return render_template('detail.html',ques=quest) <a href="{{ url_for('detail',question_id=foo.id) }}">{{foo.author.username}}</a> <br> <a href="#">{{ foo.title }}</a><br> <span class="badge">{{ foo.creat_time }}</span><br> <p style="color:black">{{ foo.detail}}</p><br> 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')) create_time = db.Column(db.DateTime, default=datetime.now) detail = db.Column(db.Text, nullable=False) question = db.relationship('Question', backref=db.backref('comment')) author = db.relationship('User', backref=db.backref('comment')) {% extends'fumoban.html' %} {% block title %}評論詳情{% endblock %} <meta charset="UTF-8"> {% block head %} <link href="../static/css/detail.css" rel="stylesheet" type="text/css"> {% endblock %} {% block main %} <body id="body"> <div class="essayAera"> <ul class="list-group"> <a class="author" href="">{{ ques.author.username }}</a> <br> <a class="title" href="">{{ ques.title }}</a> <br> <span >{{ ques.create_time }}</span> <p class="abstract">{{ ques.detail }}</p> <form action=""> <div class="form-group"> <textarea class="inputFramework"style="margin-top:80px " rows="6" cols="50" id="details" name="detail"></textarea> </div> <button type="submit" class="btn btn-default">發送</button> </form> </ul> </div> </body> {% endblock %}
12、完成評論功能
@app.route('/detail/<question_id>') def detail(question_id): quest= Question.query.filter(Question.id == question_id).first() return render_template('detail.html',ques=quest) @app.route('/comment/', methods=['POST']) def comment(): comment_detail = request.form.get('new_comment') ques_id = request.form.get('question_id') auth_id = User.query.filter(User.username == session.get('user')).first().id comm = Comment(detail=comment, author_id=auth_id, question_id=ques_id, ) db.session.add(comment) db.session.commit() return redirect(url_for('detail', question_id=ques_id)) def loginFrist(func): @wraps(func) def wrapper(*args, **kwargs): if session.get('user'): return func(*args, **kwargs) else: return redirect(url_for('login')) return wrapper 複製代碼 複製代碼 <div class="essayAera"> <h3>{{ ques.title }}<br><small>{{ ques.author.username }}<span class="badge">{{ ques.create_time }}</span></small></h3> </div> <p class="lead">{{ ques.detail }}</p> <hr> <form action="{{ url_for('comment') }}"method="post"> <ul class="list-group"> <div class="form-group"> <textarea name="new_comment"class="form-control"style="margin-top:80px " rows="6" cols="50" id="new_comment"placeholder="write down your comment"></textarea> <input name="question_id"type="hidden"value="{{ ques.id }}"/> </div> <button type="submit" class="btn btn-default">發送</button> </ul></form> <h4>評論.({{ ques.comments|length }})</h4> {% endblock %}
十3、評論列表及排序,我的中心顯示
@app.route('/userCenter/<user_id>', methods=['GET']) def userCenter(user_id): user = User.query.filter(User.id == user_id).first() context = { 'username': user.username, 'questions': user.question, 'comments': user.comment } return render_template('userCenter.html', **context) {% extends 'fumoban.html' %} {% block title %}我的中心 {% endblock%} {% block main%} <div class="page-header"> <h3><span class="glyphicon glyphicon-user" aria-hidden="true"></span> {{username}} <br> <small>detail comment<span class="badge"></span> </small></h3> <ul class="list-group" style=""> {% for foo in user.question %} <li class="list-group-item"> <span class="glyphicon glyphicon-heart-empty" aria-hidden="true"></span> <a href="#">{{foo.author.username }}</a> <span class="badge">{{foo.creat_time}}</span> <p style="">{{foo.detail}}</p> </li> {% endfor %} </ul> </div> <div class="page-header"> <h3><span class="glyphicon glyphicon-user" aria-hidden="true"></span> {{user}} <br> <small>personal information<span class="badge"></span> </small></h3> <ul class="list-group" style=""> {% for foo in user.comments %} <li class="list-group-item"> <span class="glyphicon glyphicon-heart-empty" aria-hidden="true"></span> <a href="#">{{foo.author.username }}</a> <span class="badge">{{foo.creat_time}}</span> <p style="">{{foo.detail}}</p> </li> {% endfor %} </ul> </div> <div class="page-header"> <h3><span class="glyphicon glyphicon-user" aria-hidden="true"></span> {{user}} <br> <small>personal information<span class="badge"></span> </small></h3> <ul class="list-group" style=""> <li class="list-group-item">user:{{username}}</li> <li class="list-group-item">time:</li> <li class="list-group-item">nick:</li> <li class="list-group-item">context:</li> </ul> </div> {% endblock %}
十4、我的中心標籤頁導航
{% extends "我的中心.html" %} {% block usercenterbody %} <div class="page-header"> <h3><span class="glyphicon glyphicon-user" aria-hidden="true"></span>{{ username }}<br><small>問答<span class="badge>"></span> </small> </h3> <ul class="list-group"style="margin:10px"> {% for foo in comments %} <li class="list-group-item"> <span class="glyphicon glyphicon-heart-empty" aria-hidden="true"></span> <a href="#">{{ foo.author.username }}</a> <span class="badge">{{ foo.creat_time }}</span> <p style="align-content: center">{{ foo.detail }}</p> </li> {% endfor %} </ul> </div> <div class="page-header"> <h3><span class="glyphicon glyphicon-user" aria-hidden="true"></span>{{ user }}<br><small>評論<span class="badge>"></span> </small> </h3> <ul class="list-group"style="margin:10px"> {% for foo in comments %} <li class="list-group-item"> <span class="glyphicon glyphicon-heart-empty" aria-hidden="true"></span> <a href="#">{{ foo.author.username }}</a> <span class="badge">{{ foo.creat_time }}</span> <p style="align-content: center">{{ foo.detail }}</p> </li> {% endfor %} </ul> </div> <div class="page-header"> <h3><span class="glyphicon glyphicon-user" aria-hidden="true"></span>{{ user }}<br><small>我的資料<span class="badge>"></span> </small> </h3> <ul class="list-group"style="margin:10px"> <li class="list-group-item">user:{{ username }}</li> <li class="list-group-item">time:</li> <li class="list-group-item">nick:</li> </ul> </div> {% endblock %}
十5、完成我的中心——導航標籤
@app.route('/usercenter/<user_id>/<tag>') @log def usercenter(user_id,tag): user=User.query.filter(User.id==user_id).first() context={ 'username':user.username, 'questions':user.questions, 'comments':user.comments } if tag == '1': return render_template('usercenter1.html', **context) elif tag == '2': return render_template('usercenter2.html', **context) else: return render_template('usercenter3.html', **context)
@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('-creat_time') return render_template('base.html',questions=ques)
十7、密碼保護
from werkzeug.security import generate_password_hash,check_password_hash app=Flask(__name__) app.config.from_object(config) db=SQLAlchemy(app) # 建立用戶模型 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 @app.route('/login/',methods={'GET','POST'}) def login(): if request.method=='GET': return render_template('login.html') else: username = request.form.get('username') # 獲取form中的數據 password = request.form.get('password') nickname = request.form.get('nickname') user = User.query.filter(User.username == username).first() # id = User.query.filter(User.id == id).first() if user: if user.check_password(password): session['user'] = username # session['id'] = id session.permanent=True return redirect(url_for('index')) # 返回到首頁 else: return u'password error' else: return u'error username or password' #輸出錯誤