《手遊論壇系統》課程設計報告css
現現在,手機遊戲已經成爲了人們平常休閒娛樂,減壓,好友聚會,重要的一種娛樂方式。手機遊戲是一種能夠在任什麼時候間,任何地點,隨時拿出手機就能玩的遊戲娛樂模式。所以對於遊戲的質量,就須要開發者可以洞察到玩家的生理和內心需求,製做出更讓人滿意的手機遊戲,只有這樣才能促進該遊戲商家的發展。因此《手遊論壇》系統可以收集到玩家的需求信息,促進玩家之間的交流,造成良好的遊戲氛圍。如今有不少的遊戲開發商只顧及經濟效益,卻忽視公衆需求。手機遊戲玩家很難找到適合本身的遊戲。並且現在隨着網民的增長,計算機網絡愈來愈發達,人們足不出戶就可以知足本身的平常所需,人與人之間的交流愈來愈淡。交際能力也愈來愈差勁。手遊論壇系統能夠促進玩家之間的交流和互動。html
需求分析:web
隨着手機遊戲的不斷的發展,遊戲的種類也豐富多樣,人們總能找到一款適合本身的遊戲,而遊戲的開發商須要在遊戲開發出來後對遊戲作出各類改進的工程以符合市場的需求,提升用戶的滿意度,纔可以最大限度的避免遊戲玩家的流失。在手機遊戲市場總有一部分充斥着低俗,色情,扭曲的世界觀,發展觀的惡俗遊戲,或者一些收費項目,或者有一些遊戲開發商就抱着圈錢的目的,收費後就直接關閉了服務器。《手遊論壇系統》能夠極大程度的反映客戶需求,給與開發商遊戲的開發反向,作出更加精良,遊戲用戶更滿意的遊戲,更好的維護遊戲環境的發展。算法
本次網頁製做是採用Python ,Flask, Mysql的web建設技術開發的一個網站,經過本次學習讓我深入的鏈接到這項技術的強大。sql
本次網頁製做共有12頁面,除了登錄頁面,註冊頁面外,其餘頁面都用了繼承父模板的功能,該網站運用了css技術對網頁進行了美工,設計整體的網頁風格。還運用js技術,對登錄和註冊頁面的控件的限制。數據庫
該網站的開發環境:Pycharm,運用了必定的photoshop的技術輔助頁面設計服務器
用戶註冊功能:須要輸入帳號, 帳號密碼 ,(註冊後 彈出提示框 跳轉到登錄頁面)。網絡
用戶登錄功能:須要輸入帳號 ,帳號密碼 ,(登錄後 彈出提示框 跳轉網站首頁)。session
導航欄功能設計包含:數據結構
網站查詢功能:設置在導航欄 ,查詢功能能夠查看本身想查看哪款遊戲的評論,也能夠查看其餘用戶所發佈的內容 。
首頁跳轉功能:(手遊論壇)爲首頁的跳轉出發。
記住用戶帳號:將用戶登陸名記住,並顯示在登錄後的導航欄上。
帳號註銷登錄功能:註銷登錄後回跳轉回到登錄頁面。
發佈博客功能:用戶點擊導航條的發佈,將會跳轉到發佈博客的頁面,發佈成功後數據將插入到數據庫。發佈的博客的類型我用select的標籤使得用戶只能發佈跟遊戲相關的文章。
搜索功能:能進行精確查詢和模糊查詢,用戶能夠根據標題查看全部跟標題有關的內容,也可直接精確查詢到某一篇博客。
用戶的我的信息頁面:用戶的我的信息頁面能夠查看本身全部發布的博客,和查詢本身對別的用戶博客的評論。
用戶對於本身我的信息的修改:用戶能夠修改本身的頭像信息,上傳頭像圖片,也能夠修改本身的帳號密碼。能看到本身發佈博客的總篇數。
網站首頁:能夠點擊文章的標題查看文章的具體內容,對博客進行評論,和對文章進行點贊。每篇文章都有具體的發佈時間。
數據庫共建了4張表,用戶表,博客表,評論表,點贊表。用戶表的id是用戶表的主鍵,是博客表,點贊表,評論表的外鍵;ques表的主鍵是評論表和點贊表的外鍵。
用戶表的數據庫設計
名稱 |
類型 |
長度 |
小數點 |
容許爲空 |
|
Id |
Int |
11 |
0 |
|
主鍵 |
Username |
varchar |
20 |
0 |
|
|
_password |
varchar |
200 |
0 |
|
|
Nickname |
varchar |
20 |
0 |
1 |
|
img |
varchar |
128 |
0 |
1 |
|
發佈博客表:
名稱 |
類型 |
長度 |
小數點 |
容許爲空 |
|
Id |
Int |
11 |
0 |
|
主鍵 |
Author_id |
Int |
11 |
0 |
1 |
|
Title |
Varchar |
20 |
0 |
|
|
Detail |
Text |
0 |
0 |
|
|
Creat_time |
datetime |
0 |
0 |
1 |
|
點贊表
名稱 |
類型 |
長度 |
小數點 |
容許爲空 |
|
Id |
int |
11 |
0 |
|
主鍵 |
Author_id |
int |
11 |
0 |
1 |
|
Question_id |
int |
11 |
0 |
1 |
|
評論表
名稱 |
類型 |
長度 |
小數點 |
容許爲空 |
|
Id |
int |
11 |
0 |
|
主鍵 |
Author_id |
int |
11 |
0 |
1 |
|
Queation_id |
int |
11 |
0 |
1 |
|
Creat_time |
Datetime |
0 |
0 |
1 |
|
detail |
text |
0 |
0 |
|
|
數據庫設計代碼:
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(20), nullable=True)
img=db.Column(db.String(128),default=None)
class Ques(db.Model):
__tablename__ = 'question'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
author = db.relationship('User', backref=db.backref('question'))
title = db.Column(db.String(20), nullable=False)
detail = db.Column(db.Text, nullable=False)
creat_time = db.Column(db.DateTime, default=datetime.now)
用戶id是ques的外鍵
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('Ques', backref=db.backref('comment', order_by=creat_time.desc))
author = db.relationship('User', backref=db.backref('comment'))
用戶id和ques的id是評論的外鍵
class Dianzan(db.Model):
__tablename__ = 'dianzan'
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'))
question = db.relationship('Ques', backref=db.backref('dianzan'))
author = db.relationship('User', backref=db.backref('dianzan'))
db.create_all()
用戶id和ques的id是點贊表的外鍵
@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
將用戶註冊的密碼,獲取後通過加密後賦值給_password而後傳入數據庫。在用戶登錄時對密碼進行解密,檢查密碼。
2登錄算法的實現
function fuck() {
var oUname = document.getElementById("user")
var oError = document.getElementById("error_box")
var oUpass = document.getElementById("upass")
var isError = true;
oError.innerHTML = "<br>"
if (oUname.value.length > 12 || oUname.value.length < 6) {
oError.innerHTML = "用戶名至少6-12位";
isError = false;
return isError;
} else if (oUname.value.charCodeAt(0) >= 48 && oUname.value.charCodeAt(0) <= 57) {
oError.innerHTML = "用戶名必須爲字母";
isError = false;
return isError;
} 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 = "only letter or number";
isError = false;
return isError;
}
}
if (oUpass.value.length > 20 || oUpass.value.length < 6) {
oError.innerHTML = "密碼爲 6-20位字符";
isError = false;
return isError;
}
window.alert("歡迎進入手遊論壇")
return true;
}
對登錄的輸入框進行限制,從登錄頁面input的用戶和密碼的id和錯誤提示框id,再在js從新定義,加入限制。
@app.route('/login/', methods=['GET', 'POST'])
def login():
if request.method == 'GET':
return render_template('login.html')
else:
username = request.form.get('username')
password = request.form.get('password')
user = User.query.filter(User.username == username).first()
# 判斷用戶名是否存在
if user:
if user.check_password(password):
session['user'] = username
session['userid']=user.id
session.permanent = True
return redirect(url_for('index'))
else:
return u'密碼錯誤'
else:
return u'帳號不存在'
登錄頁面用post方法獲取輸入的內容,得到username,password 在數據庫進行查詢user = User.query.filter(User.username == username).first()判斷用戶名 是否存在。判斷帳號和密碼是否正確再返回相應的結果。當點擊登錄時會觸發onclick,返回fun()的方法,調用js。
def loginFirst(func):
@wraps(func)
def wrapper(*args, **kwargs):
if session.get('user'):
return func(*args, **kwargs)
else:
return redirect(url_for('login'))
return wrapper
當用戶想使用其餘操做,def loginFirst(func)會限制用戶跳轉到登錄頁面。
@app.route('/fabu', methods=['GET', 'POST'])
@loginFirst
def fabu():
if request.method == 'GET':
return render_template('fabu.html')
else:
title = request.form.get('title')
detail = request.form.get('detail')
author_id = User.query.filter(User.username == session.get('user')).first().id # 判斷用戶名是否存在
question = Ques(title=title, detail=detail, author_id=author_id)
db.session.add(question)
db.session.commit()
return redirect(url_for('index'))
用post從發佈頁面得到title,detail,用get方法獲取發佈頁面,先在數據庫判斷用戶是
否存在,讓後傳數據入數據庫,返回登錄頁面。
def comment():
comment =request.form.get('new_comment')
question_id=request.form.get('question_id')
auth_id=User.query.filter(User.username==session.get('user')).first().id
判斷做者id是否存在
comm = Comment(author_id=auth_id,question_id=question_id,detail=comment)
db.session.add(comm)
db.session.commit()
return redirect(url_for('detail',question_id=question_id))
用get的方法獲取評論信息,將做者id,評論者id,評論信息插入數據庫。
@app.route('/dianzan/',methods=['GET','POST'])
@loginFirst
def dianzan():
author_id=request.form.get('author_id')
question_id=request.form.get('question_id')
dianzan=Dianzan(author_id=author_id,question_id=question_id)
db.session.add(dianzan)
db.session.commit()
return redirect(url_for('detail',question_id=question_id))
當點擊點贊按鈕就會增長點贊表dianzan列的長度,而後獲取點贊者的id,做者的id,插入數據庫。
@app.route('/password_update/<user_id>',methods=['GET','POST'])
def password_update(user_id):
user=User.query.filter(User.id==user_id).first()
if request.method == 'GET':
return render_template('password_update.html',user=user)
else:
password=user.password=request.form.get('password')
db.update(password)
db.session.commit()
return redirect(url_for('login'))
用post和get方法獲取用戶的帳戶,驗證兩次密碼輸入是否一致,再賦值給原來的
Password,返回登錄頁面。
@app.route('/usercenter_updata/<user_id>',methods=['GET','POST'])
@loginFirst
def usercenter_updata(user_id):
user = User.query.filter(User.id == user_id).first()
if request.method == 'GET':
return render_template('usercenter_updata.html', user=user)
else:
user = User.query.filter(User.id == user_id).first()
f = request.files['img']
basepath = os.path.dirname(__file__) # 當前文件所在路徑
upload_path = os.path.join(basepath, 'static/img', f.filename) # 注意:沒有的文件夾必定要先建立,否則會提示沒有該路徑
f.save(upload_path)
user.img = 'img/' + f.filename
db.session.commit()
return redirect(url_for('usercenter',user_id=user_id,tag=1))
上傳圖片。
@app.route('/search/',methods=['GET','POST'])
def search():
search = request.args.get('search')
question = Ques.query.filter(
or_(
Ques.title.contains(search),
Ques.detail.contains(search)
)
).order_by('-creat_time')
根據標題,和內容,返回相應數據列表。根據時間排序。
1登錄頁面
2註冊頁面
3手遊論壇首頁
首頁圖片能夠鏈接到相應的官方網站
4發佈博客頁面
5評論頁面和點贊
6我的信息頁面
7顯示所有博客頁面
8顯示評論頁面
9修改我的信息密碼
10上傳圖像