管理信息系统 课程设计(2018-6-16)
1.?引言?
在這個(gè)信息技術(shù)發(fā)展飛快的時(shí)代,信息也不再是像從前那么單一,具體的形式來(lái)存在的,所以我們對(duì)于信息也不能以以前的態(tài)度去面對(duì),我們要有更好的方法去管理信息,利用Python+Flask+MysqL和HTML+CSS去制作一個(gè)屬于自己的網(wǎng)站,把信息進(jìn)行統(tǒng)一的管理,才會(huì)跟上時(shí)代,不斷進(jìn)步。
在網(wǎng)絡(luò)技術(shù)不斷的發(fā)展之下,一些網(wǎng)頁(yè)布局與后端鏈接有了更多的模式,特別是在網(wǎng)絡(luò)上的管理信息系統(tǒng)的不斷優(yōu)化,這一模型概念也有了緊跟大局的改變。我們要學(xué)會(huì)挖掘其中的功能和優(yōu)點(diǎn)。本次課程設(shè)計(jì)我主要是設(shè)計(jì)一個(gè)方便大眾瀏覽娛樂(lè)圈中明星的一些新聞,對(duì)自己感興趣的新聞進(jìn)行評(píng)論,發(fā)表感興趣的文章等來(lái)滿足他們的好奇心。
2.?系統(tǒng)概要說(shuō)明
1.?需求分析
該文檔目的在于明確系統(tǒng)的總體網(wǎng)頁(yè)結(jié)構(gòu)設(shè)計(jì)和相應(yīng)的算法及數(shù)據(jù)結(jié)構(gòu),設(shè)計(jì)外部軟件和內(nèi)部軟件的接口,說(shuō)明各個(gè)網(wǎng)站模塊的功能實(shí)現(xiàn),網(wǎng)頁(yè)間后臺(tái)代碼的實(shí)現(xiàn),數(shù)據(jù)結(jié)構(gòu)的細(xì)節(jié)等。
要求實(shí)現(xiàn)以下功能:
a)?網(wǎng)站父模板統(tǒng)一布局:頭部導(dǎo)航條、底部圖片導(dǎo)航、中間主顯示區(qū)域布局
b)?注冊(cè)、登錄、注銷(xiāo)
c)?發(fā)布、列表顯示
d)?詳情頁(yè)
e)?評(píng)論、列表顯示
f)?個(gè)人中心
g)?搜索,條件組合搜索
h)?文章分類(lèi)、顯示
i)?點(diǎn)贊、收藏
j)?修改密碼、頭像、上傳頭像
k)?我的發(fā)布、點(diǎn)贊、收藏、評(píng)論
l)?高級(jí)搜索
m)?熱門(mén)文章、推薦文章
2.?概要設(shè)計(jì)
軟件系統(tǒng)的總體邏輯結(jié)構(gòu),按照不同的設(shè)計(jì)方法,有不同的總體邏輯結(jié)構(gòu)。本指南以結(jié)構(gòu)化設(shè)計(jì)方法為主,畫(huà)出系統(tǒng)總體結(jié)構(gòu)圖,列出系統(tǒng)的功能模塊清單編號(hào)、名稱、功能,并盡可能描繪出功能模塊之間的關(guān)系。數(shù)據(jù)庫(kù)概念設(shè)計(jì)最常用的方法是以實(shí)體-聯(lián)系方法,該方法是用E-R圖來(lái)描述,它可以很清晰地表示出實(shí)體之間的關(guān)系,網(wǎng)頁(yè)系統(tǒng)涉及了用戶表、問(wèn)題表、內(nèi)容表、收藏表、熱文表等三個(gè)數(shù)據(jù)庫(kù)。其E-R圖如圖2.1--圖2.6所示。
用戶表
? ? ? ? ? ? ? ? ? ? ? ? ? ??
?
圖2-1
問(wèn)題表
?
圖2-2
內(nèi)容表
?
?
圖2-3
熱門(mén)新聞表
?
圖2-4
收藏表
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?
圖2-5
總體數(shù)據(jù)庫(kù)如2-6所示
圖2-6
3.?網(wǎng)頁(yè)結(jié)構(gòu)設(shè)計(jì)
1.?總體結(jié)構(gòu)圖設(shè)計(jì)
軟件系統(tǒng)的總體邏輯結(jié)構(gòu),按照不同的設(shè)計(jì)方法,有不同的總體邏輯結(jié)構(gòu)。本指南以結(jié)構(gòu)化設(shè)計(jì)方法為主,畫(huà)出系統(tǒng)總體結(jié)構(gòu)圖,列出系統(tǒng)的功能模塊清單名稱、功能、效果,并盡可能描繪出功能模塊之間的關(guān)系。關(guān)于總體結(jié)構(gòu)圖明如圖3-1所示
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?
???
圖3-1
2.?運(yùn)行環(huán)境設(shè)計(jì)
a)?Python環(huán)境變量配置
程序和可執(zhí)行文件可以在許多目錄,而這些路徑很可能不在操作系統(tǒng)提供可執(zhí)行文件的搜索路徑中。path(路徑)存儲(chǔ)在環(huán)境變量中,這是由操作系統(tǒng)維護(hù)的一個(gè)命名的字符串。這些變量包含可用的命令行解釋器和其他程序的信息。把安裝好的python路徑置于環(huán)境變量中。進(jìn)行這一步時(shí)需要特別注意的是路徑copy的路徑是否是正確,以免在終端窗口輸入時(shí),總是顯示:不是內(nèi)部或外部文件,這個(gè)是許多人會(huì)犯的錯(cuò)誤。C:\Python 是Python的安裝目錄??梢酝ㄟ^(guò)以下方式設(shè)置:
- 右鍵點(diǎn)擊"計(jì)算機(jī)",然后點(diǎn)擊"屬性"
- 然后點(diǎn)擊"高級(jí)系統(tǒng)設(shè)置"
- 選擇"系統(tǒng)變量"窗口下面的"Path",雙擊即可!
- 然后在"Path"行,添加python安裝路徑即可(我的C:\Users\Acer\AppData\Local\Programs\Python\Python36\Scripts\;),所以在后面,添加該路徑即可。?ps:記住,路徑直接用分號(hào)";"隔開(kāi)!
- 最后設(shè)置成功以后,在cmd命令行,輸入命令"python",就可以有相關(guān)顯示。
?
b)?運(yùn)行Python
我是通過(guò)命令行窗口進(jìn)入python并開(kāi)在交互式解釋器中開(kāi)始編寫(xiě)Python代碼。
?
c)?集成開(kāi)發(fā)環(huán)境:PyCharm
老師為了方便學(xué)生學(xué)習(xí),老師把整個(gè)PyCharm?文件提供給我們,我們只需要進(jìn)去bin目錄中選擇pychranmy64.exe即可,但用了時(shí)間之后就過(guò)過(guò)期,所以個(gè)人建議到網(wǎng)站重新下載。PyCharm 下載地址 :?https://www.jetbrains.com/pycharm/download/;下載完即可打開(kāi):
?
?
4.?模塊詳情設(shè)計(jì)
該系統(tǒng)的實(shí)現(xiàn)主要是以每個(gè)模塊賴設(shè)計(jì)的,模塊與模塊之間的詳細(xì)設(shè)計(jì)是有相聯(lián)系的,寫(xiě)模塊之前要進(jìn)行后臺(tái)一些包的導(dǎo)入和數(shù)據(jù)庫(kù)的設(shè)置、本系統(tǒng)有三個(gè)表需要在后端進(jìn)行展示。而模塊詳情劃主要分為12個(gè)模塊,設(shè)計(jì)的核心代碼如下所示:
(1)?包的導(dǎo)入與數(shù)據(jù)庫(kù)設(shè)置
包的導(dǎo)入:
?
數(shù)據(jù)庫(kù)的設(shè)置:
1、用戶表
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)# 密碼加密內(nèi)部使用
????user_image = db.Column(db.String(252), nullable=True,default=None)
????@property ???# 定義函數(shù),需要用屬性時(shí)可以用函數(shù)代替
????def password(self):#外部使用
????????return self._password
????@password.setter
????def password(self,row_password): ?# 密碼進(jìn)來(lái)時(shí)進(jìn)行加密,generate_password_hash是一個(gè)密碼加鹽哈希函數(shù),生成的哈希值可通過(guò)check_password_hash()進(jìn)行驗(yàn)證。
????????self._password=generate_password_hash(row_password)
????def check_password(self,row_password): ?# check_password_hash函數(shù)用于驗(yàn)證經(jīng)過(guò)generate_password_hash哈希的密碼。若密碼匹配,則返回真,否則返回假。
????????result=check_password_hash(self._password,row_password)
????????return result
2、問(wèn)答表
class Question(db.Model):
????__tablename__ = 'question'
????id = db.Column(db.Integer, primary_key=True, autoincrement=True)
????fenlei = db.Column(db.String(100), nullable=False)
????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('question'))#問(wèn)答對(duì)象的創(chuàng)建
3、內(nèi)容表
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('Question', backref=db.backref('comments',order_by=creat_time.desc))
????author = db.relationship('User', backref=db.backref('comments'))
4、收藏表
class Collection(db.Model):
????__tablename__ = 'collection'
????id = db.Column(db.Integer, primary_key=True, autoincrement=True)
????user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
????question_id = db.Column(db.Integer, db.ForeignKey('question.id')) ?# 評(píng)論對(duì)應(yīng)的文章的id
????creat_time = db.Column(db.DateTime, default=datetime.now)
????question = db.relationship('Question', backref=db.backref('collection'))# 收藏用戶的id
????user = db.relationship('User', backref=db.backref('collection'))
(2)?父模板 前端核心代碼:頂部導(dǎo)航欄、中間模塊和底部導(dǎo)航欄
頂部導(dǎo)航欄中有條件、組合搜索、高級(jí)搜索、登錄、注冊(cè)、注銷(xiāo)
?
父模板 后端代碼:
@app.route('/')
def base():
????return render_template('base.html')
首頁(yè) 前端核心代碼:
(3)?首頁(yè)?前端核心代碼:進(jìn)入前要先進(jìn)行登錄,登錄成功澤可以進(jìn)入首頁(yè),否則返回登錄;首頁(yè)中還可以發(fā)表文章的作者、時(shí)間、詳情。
??
首頁(yè)?后端核心代碼:
@app.route('/shouye/')
def shouye():
????context = {
????????'questions': Question.query.order_by('-creat_time').all() ????}
????return render_template('shouye.html', **context)
(4)?注冊(cè)頁(yè)?前端核心代碼:給用戶提供注冊(cè),輸入有效的用戶名,即用戶名為6-12位,只能是字母與數(shù)字,首位不能是數(shù)字。密碼須為6-20位。可成功注冊(cè)并把數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)當(dāng)中,若失敗則會(huì)出現(xiàn)相應(yīng)的提示。
?
注冊(cè)頁(yè)后端核心代碼:
@app.route('/regist/', methods=['GET', 'POST']) ?# methods定義它有兩種請(qǐng)求方式,因?yàn)樗诒韱蔚恼?qǐng)求是post,類(lèi)似我們?cè)趇dea中的sava請(qǐng)求模式
def regist():
????if request.method == 'GET':
????????return render_template('regist.html')
????else:
????????username = request.form.get('username') # post請(qǐng)求模式,安排對(duì)象接收數(shù)據(jù)
????????password = request.form.get('password')
????????user = User.query.filter(User.username == username).first() # 作查詢,并判斷
????????if user:
????????????return 'username existed'
????????else:
????????????user = User(username=username, password=password) # 將對(duì)象接收的數(shù)據(jù)賦到User類(lèi)中,即存到數(shù)據(jù)庫(kù)
????????????db.session.add(user) # 執(zhí)行操作
????????????db.session.commit()
????????????return redirect(url_for('login')) ?# redirect重定向
(5)?登錄頁(yè)?前端核心代碼:用戶注冊(cè)成功后方可進(jìn)行登錄,利用js技術(shù),用戶在登錄時(shí)對(duì)用戶名和密碼進(jìn)行約束與設(shè)置,成功登錄即可跳轉(zhuǎn)到首頁(yè)。
??
?
登錄頁(yè)?后端核心代碼:
@app.route('/login/', methods=['GET', 'POST']) # methods定義它有兩種請(qǐng)求方式
def login():
????if request.method == 'GET':
????????return render_template('login.html')
????else:
????????usern = request.form.get('username') # post請(qǐng)求模式,安排對(duì)象接收數(shù)據(jù)
????????passw = request.form.get('password')
????????user = User.query.filter(User.username == usern).first() # 作查詢,并判斷
????????if user: ?# 判斷用戶名
????????????if user.check_password(passw): # 判斷密碼
????????????????session['user'] = usern ?# 利用session添加傳回來(lái)的值username
????????????????session['userid']=user.id
????????????????session.permannet = True
????????????????return redirect(url_for('shouye'))
????????????else:
????????????????return '密碼錯(cuò)誤'
????????else:
????????????return '用戶名不存在,請(qǐng)先注冊(cè)'
(6)?用戶詳情頁(yè)?前端核心代碼:由三個(gè)部分組成:問(wèn)題中心、評(píng)論中心和個(gè)人詳情
???????
?
用戶詳情頁(yè)?后端核心代碼:為了把頁(yè)面分開(kāi),我們?cè)?/span>html頁(yè)面?zhèn)髁艘粋€(gè)tag參數(shù),根據(jù)tag的不同去到不同頁(yè)面,一個(gè)請(qǐng)求跳轉(zhuǎn)3個(gè)不同頁(yè)面。
@app.route('/usercenter/<user_id>/<tag>') ?# 為了把頁(yè)面分開(kāi),我們?cè)趆tml頁(yè)面?zhèn)髁艘粋€(gè)tag參數(shù)
@loginFirst
def usercenter(user_id,tag):
????user=User.query.filter(User.id==user_id).first()
????context={
?????????????'number': user.id,
?????????????'user':user,
?????????????'question': user.question,
?????????????'comments': user.comments,
?????????????'img':user.user_image
????} ??# 根據(jù)tag的不同去到不同頁(yè)面,一個(gè)請(qǐng)求跳轉(zhuǎn)3個(gè)不同頁(yè)面
????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)
(7)?問(wèn)題中心頁(yè)
??????
(8)?評(píng)論中心頁(yè)
?????
(9)?個(gè)人詳情頁(yè)
??????
(10)?問(wèn)答詳情頁(yè) 前端核心代碼:
?????
問(wèn)答詳情頁(yè) 后端核心代碼:
@app.route('/xiangqing/<question_id>')
def xiangqing(question_id):
????quest = Question.query.filter(Question.id == question_id).first()# 根據(jù)主頁(yè)帶回來(lái)的id查詢出整條元組記錄,丟進(jìn)question
????comments = Comment.query.filter(Comment.question_id==question_id).all() # 根據(jù)帶回來(lái)的question的id在Comment查詢出所有評(píng)論
????return render_template('xiangqing.html', ques=quest,comments=comments) ?# 把值question傳到question,在xiangqing.html頁(yè)面調(diào)用
(11)?發(fā)布區(qū)?前端核心代碼:提高用戶提出問(wèn)題和對(duì)文章進(jìn)行評(píng)論的功能
??????
發(fā)布區(qū)?后端核心代碼:獲取后根據(jù)條件組搜索和分類(lèi)功能進(jìn)入相應(yīng)的文章頁(yè)面,發(fā)表的評(píng)論和問(wèn)題會(huì)以數(shù)據(jù)庫(kù)形式保存下來(lái),提交后回到首頁(yè)。
@app.route('/question/', methods=['GET', 'POST'])
@loginFirst
def question():
????if request.method == 'GET':
????????return render_template('question.html')
????else:
????????title = request.form.get('title')
????????detail = request.form.get('detail')
????????fenlei = request.form.get('fenlei')
????????author_id = User.query.filter(User.username == session.get('user')).first().id ?# 將session get到的user進(jìn)行查詢并取出id放到外鍵author_id中
????????question = Question(title=title, detail=detail, author_id=author_id,fenlei=fenlei)
????????db.session.add(question)#保存到數(shù)據(jù)庫(kù)
????????db.session.commit()
????????return redirect(url_for('shouye')) ?# 重定向到登錄頁(yè)
(12)?修改密碼?前端核心代碼:為了用戶賬號(hào)安全起見(jiàn),本系統(tǒng)為此設(shè)置了修改密碼功能,對(duì)舊的密碼進(jìn)行重新設(shè)置。
???????
修改密碼 后端核心代碼:
@app.route('/edit_password/', methods=['GET', 'POST'])
def edit_password():
????if request.method == 'GET':
????????return render_template("edit_password.html")
????else:
????????newpassword = request.form.get('password')
????????user = User.query.filter(User.id == session.get('userid')).first()
????????user.password = newpassword
????????db.session.commit()
????????return redirect(url_for('shouye'))
(13)?組合條件搜索 前端核心代碼:在搜索框中輸入你需要的關(guān)鍵詞同時(shí)在另一個(gè)分類(lèi)的下拉列表選擇你需要的類(lèi)型即可查詢到結(jié)果。
????????
?
組合條件搜索 后端核心代碼:
@app.route('/search/')
def search():
????qu=request.args.get('q') # args獲取關(guān)s鍵字,區(qū)別form
????fenlei = request.args.get('fenlei')
????ques=Question.query.filter(
????????and_( ????????????????# 兩種查詢條件
????????????Question.title.contains(qu), # 通過(guò)模糊查詢,查找問(wèn)題的標(biāo)題
????????????Question.detail.contains(qu), # 通過(guò)模糊查詢,查找問(wèn)題的詳細(xì)內(nèi)容
????????????Question.fenlei.contains(fenlei) ?) ).order_by('-creat_time')
????return render_template('shouye.html',questions=ques) ?# question要和原首頁(yè)數(shù)據(jù)模型一樣
(14)?分類(lèi)功能:對(duì)你發(fā)布的評(píng)論或文章進(jìn)行星類(lèi)分類(lèi)
<form action="{{ url_for('search') }}" class="navbar-form navbar-right" role="search" method="get">
????<select class="form-control" name="fenlei" id="fenlei">
????????<option value="">星類(lèi)分類(lèi)</option>
????????<option value="男明星">男明星</option>
????????<option value="女明星">女明星</option>
????????<option value="童星">童星</option>
????</select>
????<div class="form-group"><input type="text" name="q" class="form-control" placeholder="輸入您感興趣...">
????</div>
????<button type="submit" class="btn btn-default" style="width: 50px">查詢</button>
</form>
(15)?點(diǎn)藏功能:對(duì)自己喜歡的文章或評(píng)論進(jìn)行點(diǎn)藏。
????????
(16)?上傳頭像 前端核心代碼:在用戶表中定義一個(gè)用戶頭像的直,后臺(tái)寫(xiě)上傳頭像函數(shù),從后臺(tái)傳值到前端頁(yè)面,新建一個(gè)upload文件放上傳頭像的文件。???
上傳頭像 后端核心代碼:
@app.route('/uploadLogo/<user_id>', methods=['GET', 'POST'])
def uploadLogo(user_id):
?????user = User.query.filter(User.id == user_id).first()
?????f = request.files['logo']
?????basepath = os.path.dirname(__file__) ?# 當(dāng)前文件所在路徑
?????upload_path = os.path.join(basepath, 'static/uploads', f.filename)
?????f.save(upload_path)
?????user.user_image = 'uploads/' + f.filename
?????db.session.commit()
?????return redirect(url_for('usercenter', user_id=user_id,tag=3));
(17)?高級(jí)搜索:利用模糊搜索進(jìn)行設(shè)置
@app.route('/search')
def search():
????qu = request.args.get('q')
????c = '' if request.args.get('c') == '' else request.args.get('c')
????y = '' if request.args.get('y') == '' else request.args.get('y')
????query = Question.query.filter(
????????or_(
????????????Question.title.contains(qu),
????????????Question.detail.contains(qu),
????????),
????????Question.cf.like('%' + c + '%'),
????????Question.creat_time.like('%' + y + '%'),
????).order_by('-creat_time').all()
????context = {
????????'questions': query,
????????'cf': Cf.query.all(),
????????'hot': Question.query.order_by('-click').all()[0:5]
????}
????return render_template('shouye.html', **context)
(18)?收藏功能 前端核心代碼:在詳情頁(yè)中鏈接到后臺(tái),個(gè)人中心頁(yè)面增加一個(gè)收藏功能的按鈕,把自己喜歡的文章收藏在個(gè)人信息當(dāng)中并展現(xiàn)出來(lái),存入數(shù)據(jù)庫(kù)。
?????????
收藏功能 后端核心代碼:
Collection = db.Table(
????'collection',
????db.Column('id', db.Integer, primary_key=True, autoincrement=True),
????db.Column('book_id', db.Integer, db.ForeignKey('question.id')), ?# 評(píng)論對(duì)應(yīng)的文章的id
????db.Column('collection', db.Integer, db.ForeignKey('user.id')), ?# 收藏用戶的id
????db.Column('createdate', db.DATETIME) ?# 發(fā)布時(shí)間)
(19)?熱門(mén)文章 前端核心代碼:
?????????
熱門(mén)新聞 后端核心代碼:把熱門(mén)新聞儲(chǔ)存在數(shù)據(jù)庫(kù)當(dāng)中
@app.route('/remen/',methods=['GET','POST'])
def remen():
????question = Question.query.all()
????return render_template('remen.html',question=question)
?
5.?系統(tǒng)實(shí)現(xiàn)的關(guān)鍵算法與數(shù)據(jù)結(jié)構(gòu)
邏輯結(jié)構(gòu)設(shè)計(jì)階段的任務(wù)是將概念結(jié)構(gòu)設(shè)計(jì)階段所得到的概念模型轉(zhuǎn)換為具體DBMS所能支持的數(shù)據(jù)模型(即邏輯結(jié)構(gòu)),并對(duì)其進(jìn)行優(yōu)化。邏輯結(jié)構(gòu)設(shè)計(jì)一般分為三步進(jìn)行:
(1)?將概念結(jié)構(gòu)轉(zhuǎn)換為一般的關(guān)系、網(wǎng)狀、層次模型;
(2)?將轉(zhuǎn)換的關(guān)系、網(wǎng)狀、層次模型向特定的DBMS支持下的數(shù)據(jù)模型轉(zhuǎn)換;
(3)?對(duì)數(shù)據(jù)模型進(jìn)行優(yōu)化;如下圖所示:
| 數(shù)據(jù)結(jié)構(gòu) | 數(shù)據(jù)項(xiàng) | 類(lèi)型 | 長(zhǎng)度 | 備注 |
| ?用戶表 | id | int | 11 | 主鍵 |
| username | varchar | 20 | ? | |
| _password | varchar | 200 | ? | |
| User_image | varchar | 252 | ? | |
| ?發(fā)布問(wèn)題表 | id | int | 11 | 主鍵 |
| fenlei | varchar | 100 | ? | |
| title | varchar | 100 | ? | |
| detail | text | 0 | ? | |
| creat_time | datetime | 0 | ? | |
| author | int | 11 | ? | |
| ?內(nèi)容詳情表 | id | int | 11 | 主鍵 |
| author_id | int | 11 | ? | |
| question_id | int | 11 | ? | |
| creat_time | datetime | 0 | ? | |
| ?收藏表 | id | int | 11 | 主鍵 |
| User_id | int | 11 | ? | |
| collection | varchar | 100 | ? | |
| creatdate | datetime | 0 | ? | |
| ?????????????熱門(mén)新聞表 | id | int | 11 | 主鍵 |
| question_id | int | 11 | ? | |
| creat_time | datetime | 0 | ? |
?
(1)數(shù)據(jù)庫(kù)的物理設(shè)計(jì)通常分為兩步:確定數(shù)據(jù)庫(kù)的物理結(jié)構(gòu)?;
(2)對(duì)物理結(jié)構(gòu)進(jìn)行評(píng)價(jià),評(píng)價(jià)的重點(diǎn)是時(shí)間和空間效率;如下所示;
用戶名:用戶表中的username是用戶的要瀏覽網(wǎng)站前登錄的姓名。
密碼:是以加密的形式存放的于數(shù)據(jù)庫(kù)。
數(shù)值:所有id的數(shù)值類(lèi)型都為int。其他為varchar、文本或時(shí)間類(lèi)型。
注冊(cè):所有人要瀏覽本網(wǎng)站前都要注冊(cè)一個(gè)屬于自己的賬號(hào)。
登錄:每個(gè)已注冊(cè)過(guò)的用戶則可通過(guò)賬號(hào)和密碼登錄。
發(fā)布評(píng)論:使用者可以對(duì)自己感興趣的新聞進(jìn)行評(píng)論并儲(chǔ)存在數(shù)據(jù)庫(kù)中。
發(fā)表熱門(mén)文章:使用者可以發(fā)表自己感興趣的文章并儲(chǔ)存在數(shù)據(jù)庫(kù)中。
查詢個(gè)人信息:用戶點(diǎn)擊自己頭像或用戶名則可以進(jìn)入個(gè)人信息網(wǎng)站,查看自己的昵稱、頭像、發(fā)布問(wèn)題、發(fā)布評(píng)論等。
修改密碼:可以重新設(shè)置新的密碼來(lái)保護(hù)自己的賬號(hào)。
上傳頭像:用戶可以根據(jù)自己的喜好改變自己頭像并儲(chǔ)存和展示在頁(yè)面當(dāng)中,還保存在數(shù)據(jù)庫(kù)中。
高級(jí)搜索:采用模糊查詢方式進(jìn)行設(shè)置。
本系統(tǒng)進(jìn)行用戶身份驗(yàn)證時(shí),首先通過(guò)注冊(cè)界面后再進(jìn)入登錄頁(yè)面獲得用戶輸入賬號(hào)和密碼,網(wǎng)站通過(guò)訪問(wèn)數(shù)據(jù)庫(kù)的用戶表,若不匹配,返回結(jié)果到登錄窗口提示錯(cuò)誤,相反登錄成功。
本系統(tǒng)進(jìn)行登錄后轉(zhuǎn)到首頁(yè),然后可以進(jìn)行搜索你要的相關(guān)娛樂(lè)新聞,發(fā)表評(píng)論,發(fā)表文章等;還可以對(duì)信息進(jìn)行查看和修改。如果查詢不到指定信息,則系統(tǒng)提示錯(cuò)誤。
6.?成品展現(xiàn)
① 父模版(base.html)
?
② 首頁(yè)(shouye.html)
③ 注冊(cè)頁(yè)(regist.html)
?
④ 登錄頁(yè)(regist.html)
?
⑤ 用戶詳情頁(yè)(usercenter.html)
?
⑥ 發(fā)布詳情頁(yè)(xiangqing.html)
????
⑦ 問(wèn)題發(fā)布頁(yè)(question.html)
?
⑧ 評(píng)論頁(yè)(usercenter2.html)
????
⑨ 個(gè)人信息(usercenter3.html)
????????
⑩ 修改密碼(edit_password.html)
?
? 組合搜索:在下拉列表框中選擇“男明星”選項(xiàng),同時(shí)在搜索框中查找“李”字,會(huì)出現(xiàn)相應(yīng)的我發(fā)表過(guò)的男明星為李易峰的相應(yīng)內(nèi)容出現(xiàn)
??????
? 分類(lèi)功能:對(duì)自己發(fā)布的問(wèn)題及文章進(jìn)行分類(lèi),以明星進(jìn)行分類(lèi),按照相應(yīng)的分類(lèi),點(diǎn)擊后展示出在頁(yè)面。
? 點(diǎn)贊功能
??
? 上傳頭像功能
??
上傳完成后,會(huì)出現(xiàn)相應(yīng)的文件和頭像:
??????
? 高級(jí)搜索功能:是用模糊查找來(lái)實(shí)現(xiàn)的,通過(guò)在搜索框中輸入關(guān)鍵詞即可出現(xiàn)相應(yīng)文章。
???
? 收藏功能:在發(fā)表文章那里增加一個(gè)收藏的按鈕,并傳值在個(gè)人中心頁(yè)面也可看到。
??
? 熱門(mén)新聞發(fā)表功能:把自己發(fā)布的東西中一些熱門(mén)新聞通過(guò)“添加熱門(mén)”這個(gè)按鈕展現(xiàn)在頁(yè)面。還可以在首頁(yè)看到自己發(fā)布的熱門(mén)新聞。
?
?
7.?結(jié)束語(yǔ)
本系統(tǒng)采用pycharnm框架構(gòu)建,主要使用web前端設(shè)計(jì)+后臺(tái)設(shè)計(jì)+MySql數(shù)據(jù)庫(kù)技術(shù)來(lái)開(kāi)發(fā),用web技術(shù)來(lái)開(kāi)發(fā)界面,實(shí)現(xiàn)前后臺(tái)的數(shù)據(jù)就交互;用當(dāng)前主流開(kāi)源數(shù)據(jù)庫(kù)MySql作為數(shù)據(jù)庫(kù)服務(wù)器。我們不僅要掌握基本的Web前端開(kāi)發(fā)技術(shù),網(wǎng)站性能優(yōu)化、SEO和服務(wù)器端的基礎(chǔ)知識(shí),而且要學(xué)會(huì)運(yùn)用各種工具進(jìn)行輔助開(kāi)發(fā)以及理論層面的知識(shí),包括代碼的可維護(hù)性、組件的易用性、分層語(yǔ)義模板和瀏覽器分級(jí)支持等。
此娛樂(lè)網(wǎng)站系統(tǒng)能夠方便讀者瀏覽娛樂(lè)圈的最新新聞,還有搜索自己感興趣的新聞,進(jìn)行評(píng)論和表發(fā)自己的看法,還可以發(fā)表熱文等功能。這些功能都需要前端和后端代碼相結(jié)合實(shí)現(xiàn)的。整個(gè)系統(tǒng)功能算是挺多的,自己在花費(fèi)了不少時(shí)間去完善它,雖然還存在不足,希望在接下來(lái)的實(shí)踐或者課堂中能深究學(xué)習(xí)并把它做到更好。
8.?參考文獻(xiàn)
[1]黃瑋雯.網(wǎng)頁(yè)界面設(shè)計(jì)[J].人民郵電出版社,2013-02-01
[2]朱利安·丹喬 .Python高手之路[J].法國(guó),2016-07-15
[3]赫特蘭(MagnusLieHetland)﹒Python基礎(chǔ)教程[J]﹒北京:人民郵電出版社,2010-07-01
[4]謝瑛俊﹒Python全棧開(kāi)發(fā)實(shí)踐入門(mén)[J]﹒北京:電子工業(yè)出版社,2017-03月?
?
轉(zhuǎn)載于:https://www.cnblogs.com/laidaili/p/9190383.html
總結(jié)
以上是生活随笔為你收集整理的管理信息系统 课程设计(2018-6-16)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: BZOJ3075[USACO 2013
- 下一篇: Windows 10 安装 Docker