前言
Flask是一個使用python編寫的輕量級Web框架,對比其他相同類型的框架而言,這個框架更加的靈活輕便。並且具有很強的定制性,用戶可以根據自己的需求添加功能,有強大的插件庫,這也是為什么這個框架在python領域一直火熱的原因。這篇文章我們將使用這個框架編寫一個屬於自己的博客網站!並教你如何通過使用內網穿透工具處理項目,讓本地的項目可以在公網訪問!
首先來看看我們開發的博客Web項目的一些展示。
項目主要包含主要以下功能:個人的注冊與登錄模塊,首頁文章展示模塊,引入MD格式的文章發布模塊,賬號注銷模塊,文章分類與編輯模塊,文章發布修改模塊與文章展示分頁模塊,數據庫管理模塊。
下面我們對各個模塊的代碼進行編寫
1.個人的注冊與登錄模塊
這個模塊的主要讓用戶進行用戶的注冊,之后判斷輸入的密碼是否一致,並將結果寫入到數據庫。
from flask import render_template, redirect, url_for, request, flash, session
from front_back import front
from modles.dbmodels import User, db
import hashlib
from utils import login_check
2.首頁文章展示模塊
這個模塊合並了分頁的功能,當發布文章的數量在當前頁面無法展示完全的時候就使用增加分頁的方式進行展示,並通過bootstrap提供的分頁導航欄進行編寫。
3.文章詳情展示模塊
這個模塊主要是拿到文章模型的全部時間並進行展示,並通過文章的id進行精准展示
4.文章發布模塊
這個模塊引入了md格式的文章編寫模塊,用戶可以根據md的語法進行文章發編寫與發布,同時增加右邊的語法預覽框方便用戶看到文章的展示情況
5.文章添加分類模塊
這個模塊,用戶可以自己輸入要增加的分組的名稱,之后可以選擇分組要展現的顏色進行展示,並把相關數據存入數據庫
6.文章分類管理模塊
這個模塊主要是對用戶編輯的分組與顏色進行編輯與刪除的管理功能
7.文章管理模塊
這個模塊提供了文章的管理功能,用戶如果對已經發布的文章有繼續改進的想法可以在這個模塊進行編輯,並對文章進行刪除或者編輯重新發布的操作。
8.用戶個人信息注銷模塊
通過這個模塊用戶可以一鍵注銷當前登錄的賬號,並回到登錄頁面
# 注銷登錄,在base寫上 @front.route('/logout') def logout(): session.clear() flash("注銷登錄成功") return redirect(url_for('front.login'))
9.信息管理模塊
對於上面模塊的信息都需要存入到mysql數據庫,首先在本地的MySQL數據庫創建一個blog庫,之后執行Web項目,這個模塊會把對於的數據庫表信息與數據庫表進行映射創建,並賦值對應的類型。
login_manager = LoginManager() db=SQLAlchemy() #實例化sqlalchemy對象 class User(db.Model,UserMixin): # __tablename__='login_register' id = Column(db.Integer,autoincrement=True,primary_key=True) #autoincrement自增長 username=Column(db.String(50),nullable=False) password=Column(db.String(128),nullable=True) # 沒有這個的話,使用{{users}}顯示的就是一個對象 def __repr__(self): return self.username def get_id(self): return True class Article(db.Model): __tablename__='article' id = db.Column(db.Integer, autoincrement=True, primary_key=True) title = db.Column(db.String(50), nullable=False,unique=True) content=db.Column(db.String(512),nullable=True) uid=db.Column(db.Integer,db.ForeignKey('user.id')) gid=db.Column(db.Integer,db.ForeignKey('article_group.id')) create_time=db.Column(db.DateTime) update_time=db.Column(db.DateTime) #下面相當於做一個聯表查詢。 users=db.relationship('User',backref=db.backref('articles')) groups=db.relationship('ArticleGroup',backref=db.backref('articles')) def __repr__(self): return '<Article %s>'%self.title class ArticleGroup(db.Model): __tablename__='article_group' id = db.Column(db.Integer, autoincrement=True, primary_key=True) name = db.Column(db.String(50), nullable=False,unique=True) color= db.Column(db.String(50), nullable=False) def __repr__(self): return '<ArticleGroup %s>'% self.name @login_manager.user_loader def get_user(user_id): #對主鍵的查詢是沒有必要使用filler_by的 user = db.session.query(User).get(user_id) return user
10.程序啟動模塊
這個模塊為了讓Flask的啟動入口更加的簡介,我對啟動模塊的代碼進行了封裝操作
def create_app(): app=Flask(__name__) app.config.from_object('config') register_blueprint(app) db.init_app(app) login_manager.init_app(app) login_manager.login_view="front.login" login_manager.login_message_category='請先登錄或注冊' db.create_all(app=app) return app def register_blueprint(app): from front_back import front app.register_blueprint(front)
應用程序主類
from current import create_app app=create_app() if __name__ == '__main__': app.run(host='0.0.0.0',debug=True,port=83)
到這里我們的博客項目相關模塊就編寫完成啦,其實還有很多的功能小伙伴們可以根據自己的需求添加,這也是Flask極具特色的一個地方,這里要說明的一點是,由於前端部分的代碼太多啦,這里就不展示出來了,需要的小伙伴可以私我拿到整體的代碼喲。
11.內網穿透模塊
這個模塊對於很多小伙伴來說可能比較陌生,這里舉一個例子方便小伙伴們理解。
加入說我們要把上面寫好的項目進行部署,並讓全部人可以使用的話,很容易想到的一點是,利用服務器。但是服務器的成本較高,而且部署的過程也比較繁雜,那么有沒有什么好的方式可以幫我們實現本地的服務id映射到公網訪問呢?答案就是內網穿透
這里給大家介紹一個快捷的內網穿透工具,花生殼。大家可以直接去搜索下載哦。
下載好之后我們只需要把我們本機的ip輸入進去,他就會幫我們生成一個域名,實現公網可訪問,如下圖。
之后到瀏覽器測試是否可以訪問:
12.總結
到這里對於博客的編寫與內網穿透的實踐就介紹完了!總體來說要上手Flask這個框架的話還是不難的,但重要的是當你想學習一樣東西的時候就要堅持下去,努力了就會有回報!獲取博客源碼請關注下方公眾號,聯系我哦。