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