課程設計

  1. 系統概要說明  

該網站採用python+flask+mysqlweb建設技術,用戶能夠發表問答的評論,以及對問答的一些點贊和收藏功能,能夠根據用戶的關鍵字搜索文章向用戶推薦類似文章等。 css

 

註冊頁面:用戶註冊,儲存在數據庫,而後用戶進行註冊驗證;html

登陸:用戶註冊完後,進入網站;前端

註銷:網頁註冊賬號的正常狀態轉爲未登陸狀態多個用戶,也能夠退出這個用戶,轉入另外一個用戶也泛指刪除與取消用戶與賬號的激活狀態python

用戶發佈功能:用戶能夠發表本身見解和建議,問答存儲到數據庫中;mysql

詳情頁:詳情頁中具備評論及推薦文章功能,用戶可對新聞進行評論發表還可對文章進行點贊及收藏,此操做過程存入數據庫,以用戶id、新聞id做爲外鍵;網站還根據用戶感興趣的新聞推薦類似類型的新聞文章。web

我的中心:根據用戶的活躍度,呈現用戶發佈的新聞,評論文章,收藏文章以及點贊。算法

搜索:能夠根據用戶輸入關鍵詞進行模糊搜索,同時也能夠條件組合搜索。sql

 

 

 

 

2.網站結構設計數據庫

python是一種面向對象的解釋型計算機程序設計語言,具備豐富和強大的庫,它有高效率的高層數據結構,能簡單而有效地實現面向對象編程。Python簡潔的語法和對動態輸入的支持,再加上解釋性語言的本質,使得它在大多數平臺上的不少領域都是一個理想的腳本語言,特別適用於快速的應用程序開發。編程

Flask,是一個使用 Python 編寫的輕量級 Web 應用框架,使用簡單的核心,用 extension 增長其餘功能。

Mysql,是一種關係數據庫管理系統,關係數據庫將數據保存在不一樣的表中,而不是將全部數據放在一個大倉庫內。這三者相結合的web建設技術,我在這其中感覺到了代碼奇特的魅力。雖然有課本,可是僅僅掌握課本知識並不足以完成,還須要多多上機操做,熟悉代碼運用在哪裏,得出相對應的功能,基本功能都能準確無誤的給予數據支持。在這次建站過程當中,前端界面採用的是htmlcssJavaScript,後端採用python做爲支持

  3.模塊詳細設計

 

 

 

 

  3.數據庫設計

根據數據庫規範的設計方法,把數據庫的設計分爲如下六個階段:①.需求分析階段 .②慨念結構設計 ③.邏輯結構設計 ④物理結構設計 ⑤數據庫實施  ⑥.數據庫的運行和維護

共有5張表:

 

 

 

 4.系統實現的關鍵算法與數據結構

評論,收藏,點贊:

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'))
    fabu_id = db.Column(db.Integer, db.ForeignKey('fabu.id'))
    creat_time = db.Column(db.DateTime, default=datetime.now)
    detail = db.Column(db.Text, nullable=False)
    fabu = db.relationship('Fabu',
                           backref=db.backref('comments', order_by=creat_time.desc))  # order_by=creat_time.desc按時間降序
    author = db.relationship('User', backref=db.backref('comments'))
 
 
class Shoucang(db.Model):   # 收藏
    __tablename__ = 'shoucang'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    fabu_id = db.Column(db.Integer, db.ForeignKey('fabu.id'))
    fabu = db.relationship('Fabu', backref=db.backref('shoucangs'))
    author = db.relationship('User', backref=db.backref('shoucangs'))
 
 
class Dianzang(db.Model):   # 點贊
    __tablename__ = 'dianzang'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    fabu_id = db.Column(db.Integer, db.ForeignKey('fabu.id'))
    fabu = db.relationship('Fabu', backref=db.backref('dianzangs'))
    author = db.relationship('User', backref=db.backref('dianzangs'))
# 跳轉首頁搜索
@app.route('/search/') def search(): sousuo = request.args.get('sousuo') # args獲取關鍵字,區別form author = User.query.all() ydfabu = Fabu.query.filter(Fabu.yuedu > 5).all() fabus = Fabu.query.filter( or_( # 兩種查詢條件 Fabu.title.contains(sousuo), # contains模糊查 Fabu.detail.contains(sousuo) ) ).order_by('-creat_time') return render_template('daohang.html', fabus=fabus, author=author, ydfabu=ydfabu) # fabus要和原首頁數據模型同樣 # 跳轉高級分類查詢 @app.route('/fenlei/') def fenlei(): fenlei = request.args.get('fenlei') # args獲取關鍵字,區別form author = User.query.all() ydfabu = Fabu.query.filter(Fabu.yuedu > 5).all() fenlei_fabus = Fabu.query.filter( or_( # 兩種查詢條件 # Fabu.title.contains(fenlei), # contains模糊查 Fabu.leixing.contains(fenlei), # Fabu.creat_time.contains(fenlei) ) ).order_by('-creat_time') return render_template('daohang.html', fabus=fenlei_fabus, author=author, ydfabu=ydfabu) # fabus要和原首頁數據模型同樣

 

    上傳頭像:

#上傳頭像
@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/img', f.filename)  # 注意:沒有的文件夾必定要先建立,否則會提示沒有該路徑
    f.save(upload_path)
    user.img = 'img/' + f.filename
    db.session.commit()
    return redirect(url_for('yonghu', username_id=user_id,tag=1));
 

跳轉登陸:

# 跳轉登陸
@app.route('/denglu/', methods=['GET', 'POST'])  # methods定義它有兩種請求方式
def denglu():
    if request.method == 'GET':
        return render_template('denglu.html')
    else:
        username = request.form.get('user')  # post請求模式,安排對象接收數據
        password = request.form.get('pass')
        user = User.query.filter(User.username == username).first()  # 做查詢,並判斷
        if user:  # 判斷用戶名
            if user.check_password(password):  # 判斷密碼
                session['user'] = username  # 利用session添加傳回來的值username
                session['user_id'] = user.id
                session.permanent = True  # 設置session過時的時間
                return redirect(url_for('daohang'))
            else:
                return u'用戶密碼錯誤'
        else:
            return u'用戶不存在,請先註冊'

跳轉首頁:

@app.route('/')
def daohang():
    pl = request.args.get('pl')   # 接收順序排列的關鍵詞,接收不到就按時間排列
    if pl == '按熱度':
        context = {
            'fabus': Fabu.query.order_by('-yuedu').all(),
            'author': User.query.all(),
            'ydfabu': Fabu.query.filter(Fabu.yuedu > 5).all()  # 當發佈的文章閱讀量大於多少時取出這些文章,顯示在首頁的推薦文章
            # order_by('-creat_time')按時間降序排列,Fabu.query.all()查出了Fabu類的全部元組
        }
        return render_template('daohang.html', **context)
    else:
        context = {
            'fabus': Fabu.query.order_by('-creat_time').all(),
            'author': User.query.all(),
            'ydfabu': Fabu.query.filter(Fabu.yuedu > 5).all()  # 當發佈的文章閱讀量大於多少時取出這些文章,顯示在首頁的推薦文章
            # order_by('-creat_time')按時間降序排列,Fabu.query.all()查出了Fabu類的全部元組
        }
        return render_template('daohang.html', **context)
 
# 插入功能
user = User(username='15',password='12')
db.session.add(user)
db.session.commit()
 
# 查詢功能
user=User.query.filter(User.username=="15").first()
print(user.username,user.password)
 
# 修改功能
user=User.query.filter(User.username=="15").first()
user.password='888'
db.session.commit()
 
# 刪除功能
user=User.query.filter(User.username=="15").first()
db.session.delete(user)
db.session.commit()

 

 

 5.成品展現:

 

 

 

 

 

相關文章
相關標籤/搜索