學期總結html
本學期學習了管理信息系統這門課程,臨近期末,以爲很有收穫。管理信息系統主要由前端和後端組成,前端由html語言編寫,主要用於設計網站頁面,該語言功能強大,語法規範,我在學習的時候感受容易上手。後端由python語言編寫,該語言功能強大,語法簡潔,有時候短短几行代碼即可以完成一個功能的實現。經過一學期的學習,對於這兩種編程語言有了最基本的認識,對於平時使用的教務系統、火車票購票系統有了比其餘沒學過這個課程的學生更進一步的深入理解,對於這些系統的運行原理也瞭解地更透徹。管理信息系統主要是由用戶、管理員、軟件和數據所組成的人爲的系統,管理信息系統主要用於將有用的信息及時和準確地收集、加工和存儲,用於現實生活中管理活動的應用,能夠說,信息系統的產生極大地方便了咱們的生活。本學期的學習也爲我之後完成畢業設計打下了必定程度的基礎,但因爲時間有限,目前個人管理信息系統開發水平屬於入門級別,萬丈高樓,起於累土,後面還須要多加學習與專研,經過這一學期對python語言的學習,我明白了學習計算機語言須要不斷地去練習,當程序出現問題時,要以平靜的心態去面對,用細心去發現問題,用耐心去解決問題,在這個過程當中鍛鍊本身解決問題的能力,只有這樣的一種解決問題能力的養成,未來在工做中遇到問題才能以良好的素質去解決它,才能在編程的道路上步步爲營,踏實前進。前端
Python+Flask+MysqL的web建設技術過程總結python
Python是一種面向對象、直譯式計算機程序設計語言。公認的特色是簡單、易學、免費、開源等等。對我這種初學者來講,我最爲欣賞Python的地方是對字符串操做特別的靈活、採起縮進的方式簡單明瞭、以及簡單的語法。如下是從學期初到如今所學習的知識mysql
一、用Python進行簡單算數計算。web
二、瞭解turtle庫(海龜庫),在此環境中練習條件、循環、函數定義的代碼敲打,並畫出了五角星、同心圓、太陽花、中國國旗等(在國慶還讓咱們一同展現敲出來的五星紅旗)。sql
三、學習了字符串的基本操做,學會輸入字符串,輸出代碼計算後的結果。還學習了凱撒密碼、GDP格式化輸出、九九乘法表等簡單操做。數據庫
四、利用python進行英文詞彙統計,組合數據類型練習,用文件形式實現完成的英文詞頻統計、中文詞頻統計;利用datetime處理日期和時間,將字符串轉化成imestamp與timedelta;到前期收官再次讓咱們瞭解管理信息系統概念與基礎,理解數據存儲的方式如字典、列表、元祖、集合,瞭解到Web是圖形化的和易於導航的、與平臺無關、是分佈式的、是動態的、是交互的。編程
五、通過一個學期的學習,實現了Python+Flask+MysqL的web建設,建立了一個寵物交流網站,頁面具備寵物交流的信息,可以經過用戶登陸後進行對於寵物的討論,還可以發表評論、搜索文章關鍵字。flask
運用的工具後端
增刪查改代碼
# db.create_all()
'''添加'''
# user=User(username='mis111',password='mis111')
# db.session.add(user)
# db.session.commit()
'''修改'''
# user = User.query.filter(User.username == 'mis111').first()
# user.password = '00000'
# db.session.commit()
'''刪除'''
# user = User.query.filter(User.username == 'mis111').first()
# db.session.delete(user)
# db.session.commit()
class User(db.Model):#建立類User
__tablename__ = 'user' #類對應的表名user
id = db.Column(db.Integer, primary_key=True, autoincrement=True)#自動生成id
username = db.Column(db.String(20), nullable=False)#不能爲空
_password = db.Column(db.String(200), nullable=False) # 加密 不能爲空
nickname = db.Column(db.String(50))
userphone = db.Column(db.String(20), nullable=False)
@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 Sent(db.Model):
__tablename__ = 'sent'
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)#判斷不能爲空
author_id = db.Column(db.Integer, db.ForeignKey('user.id'))#使user id對應author id
creat_time = db.Column(db.DateTime, default=datetime.now)#得到本地時間 使其生成create time
author = db.relationship('User', backref=db.backref('sent'))
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'))
sent_id = db.Column(db.Integer, db.ForeignKey('sent.id'))
creat_time = db.Column(db.DateTime, default=datetime.now)
detail = db.Column(db.TEXT, nullable=False)
sent = db.relationship('Sent', backref=db.backref('comment', order_by=creat_time.desc))
author = db.relationship('User', backref=db.backref('comment'))
導入第三方庫
from flask import Flask, render_template, request, redirect, url_for, session
from flask_sqlalchemy import SQLAlchemy
import config,os
from datetime import datetime
from functools import wraps
from sqlalchemy import or_,and_
from werkzeug.security import generate_password_hash,check_password_hash
import os
DEBUG=True
SECRET_KEY=os.urandom(24) #加密key
DIALECT='myaql'
DRIVER='mysqldb'
USERNAME='root'
PASSWORD='ROOT'
HOST='localhost'
DATABASE='mis_db2'
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:123456@localhost:3306/mis_db2?charset=utf8'
# SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:123456@localhost:3306/mis_db?charset=utf8'
SQLALCHEMY_TRACK_MODIFICATIONS = False
@app.route('/') def base(): context = { 'username': Sent.query.order_by('creat_time').all(), # order_by('-creat_time')按時間降序排列,Fabu.query.all()查出了Fabu類的全部元組 } return render_template('shouye.html', **context)# **context將該封裝傳遞到daohang.html中調用,而上下文處理器是能夠在任何html中調用。 # @loginFirst @app.route('/detail/<sent_id>')#主PY文件寫視圖函數,帶id參數。 def detail(sent_id): sentt = Sent.query.filter(Sent.id == sent_id).first() context = { 'comment': Comment.query.all(), } return render_template('detail.html', sen=sentt, **context) @app.route('/login/', methods=['GET', 'POST'])# 跳轉登錄,methods定義它有兩種請求方式 def login(): if request.method == 'GET': return render_template('dl.html') else: username = request.form.get('dlusername')# post請求模式,安排對象接收數據 password = request.form.get('dlpassword') user = User.query.filter(User.username == username).first()# 判斷用戶名是否存在 if user: if user.check_password(password): session['user'] = username#利用session添加傳回來的值username session.permanent = True# 設置session過時的時間 return redirect(url_for('base')) else: return '密碼錯誤' else: return '用戶不存在' #用上下文處理器app_context_processor定義函數 @app.context_processor def mycontext(): usern = session.get('user')#獲取session中保存的值 if usern: return {'usern': usern} # 包裝到username,在全部html模板中可調用 else: return {}# 返回空字典,由於返回結果必須是dict @app.route('/logout/') def logout(): session.clear()#清除session return redirect(url_for('base')) @app.route('/register/', methods=['GET', 'POST'])# 跳轉註冊,methods定義它有兩種請求方式由於它在表單的請求是post,相似咱們在idea中的sava請求模式 def register(): if request.method == 'GET': return render_template('zhuce.html') else: username = request.form.get('username') # post請求模式,安排對象接收數據 password = request.form.get('password') nickname = request.form.get('nickname') userphone = request.form.get('userphone') user = User.query.filter(User.username == username).first() if user: return "帳戶已存在" else: user = User(username=username, password=password, nickname=nickname, userphone=userphone) # 將對象接收的數據賦到User類中,即存到數據庫 db.session.add(user) db.session.commit() return redirect(url_for('login'))# redirect重定向 #編寫要求登陸的裝飾器 def loginFirst(func):#參數是函數 @wraps(func)#加上wraps,它能夠保留原有函數的__name__,docstring def wrapper(*args, **kwargs):#定義wrapper函數將其返回,用*args, **kwargs把原函數的參數進行傳遞 if session.get('user'): return func(*args, **kwargs) else: return redirect(url_for('login'))#要求登陸 return wrapper @app.route('/sent/', methods=['GET', 'POST'])#應用裝飾器,要求在發佈前進行登陸,登陸後可發佈。 @loginFirst #將decorator定義的加強函數放在待加強函數定義的上面 def sent(): if request.method == 'GET': return render_template('sent.html') else: title = request.form.get('titleDetail') detail = request.form.get('questionDetail') author_id = User.query.filter(User.username == session.get('user')).first().id #將session get到的user進行查詢並取出id放到外鍵author_id中 sent = Sent(title=title, detail=detail, author_id=author_id) db.session.add(sent) db.session.commit() return redirect(url_for('base')) # return render_template('sent.html') @app.route('/comment/', methods=['POST'])#應用裝飾器,要求在評論前進行登陸,登陸後可評論。 @loginFirst def comment(): comment = request.form.get('comment') sent_id = request.form.get('sent_id') auth_id = User.query.filter(User.username == session.get("user")).first().id# # 根據id查詢出整條元組記錄 comm = Comment(author_id=auth_id, sent_id=sent_id, detail=comment) db.session.add(comm) db.session.commit() return redirect(url_for('detail', sent_id=sent_id)) @app.route('/usercenter/<user_id>/<tag>')#應用裝飾器,要求在我的中心前進行登陸,登陸後可查看我的中心。 @loginFirst def usercenter(user_id, tag): user = User.query.filter(User.id == user_id).first() context = { 'username': user.username, 'sent': user.sent, 'comment': user.comment, 'user': user } if tag == 'wenda': #若是tag是問答頁面 return render_template('wenda.html', **context)#返回至問答 elif tag == 'pinlun': #若是tag是評論頁面 return render_template('pinlun.html', **context)#返回至評論 else: return render_template('GRZX.html', **context)#返回至我的中心 @app.route('/search/') def search(): qu = request.args.get('q')#獲取搜索關鍵字 ques = Sent.query.filter(#條件查詢 or_( Sent.title.contains(qu), Sent.detail.contains(qu) ) ).order_by('creat_time') return render_template('shouye.html', username=ques)#加載查詢結果
頁面展現
首頁
註冊頁
登錄頁
我的信息頁
所有評論信息頁