1. 程式人生 > >Python Flask開源個人博客代碼

Python Flask開源個人博客代碼

寫文章 con 取ip red 視圖 從數據 處理 過濾 sel

沒有寫html模板繼承,有時間再補吧,或者感興趣的自己抽取一下

博客演示站點:http://www.7z1.xyz/

如出現未備案,請直接訪問:http://119.23.230.6/

後臺管理地址:/admin/login 賬號:admin 密碼:admin

前端代碼鏈接:https://pan.baidu.com/s/1EDDD_ct4eYgxOlpzZw7IVA 密碼:bgc2

解壓密碼:yangqq.com

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

安裝過程:

1. 下載源碼git clone https://github.com/a4demon/flask_blog
2. cd 到項目目錄
3. 根據自己需要是否創建虛擬環境,隨後安裝環境依賴  pip install -r  requirement.txt
4. 創建數據庫,註意!!創建數據庫時需要設置charset=utf8mb4,具體參照下面的評論模型有詳細寫
5. 修改config裏面的數據庫賬號密碼,以及數據庫名
6. 初始化數據庫,遷移生成數據庫
   1.  python manage.py db init
   2. python manage.py db migrate
   3. python manage.py db upgrade
7. 導入數據庫,導入數據庫之後謹慎起見再重新將數據庫設置,以及相關的表字段設置charset=utf8mb4
8. 安裝redis,並啟動redis-server,如果修改為flask自帶的session存儲cookie和session則不需要安裝
9. 運行程序

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

粗略介紹一下功能,具體功能可以去演示站查看,因為沒有抽取模板,可能各頁面暫時效果會有所差距

文章評論,評論回復,評論點贊,評論管理暫時沒寫

文章點贊,文章打賞,個人名片,雲詞標簽,

文章推薦(推薦分banner推薦,top推薦和特別推薦),

文章點擊排行,友情鏈接管理,二維碼等聯系方式展示

文章發布時間軸,文章搜索功能暫時沒寫,分類展示,

文章邏輯刪除與恢復(既隱藏文章),真實刪除(從數據庫徹底刪除)

留言管理,所有post提交的數據都做過簡單處理防止xss

支持emoji表情,對留言發布做了簡單ip限制,防止惡意提交留言

網站信息編輯等等

采用的ckeditor編輯器,支持代碼高亮

前端代碼從網上下載的,出自www.yangqq.com

留言模塊,雲詞標簽特效也是從jq22.com下載

文章點贊

 登陸和未登陸:
    未登陸:記錄當前cookie,一個cookie只可點贊一次
    登陸:每個用戶只可點贊一次,再次點擊取消點贊

評論功能

 登陸和未登陸:
    未登陸:
    登陸:

統一為未登陸,整站為博客網站,不設用戶註冊功能,感覺沒有必要,所以所有評論和回復皆為匿名評論

個人信息配置,寫數據庫模型文件,初始模型,最終已models.py為準

title           網站標題
description     描述信息
keywords        seo關鍵詞
email           郵箱
wxid            微信公眾號
wxcode          微信二維碼
butoom_title    底部標題
beian           備案號
about           關於我
tags            雲詞標簽    pointer-events在頁面設置穿透屬性,這樣鼠標事件只會在設置auto的標簽上生效
"title": self.title,
"description": self.description,
"keywords": self.keywords,
"email": self.email,
"wxid": self.wxid,
"wxcode": self.wxcode,
"butoom_title": self.butoom_title,
"beian": self.beian,
"about_me": self.about_me,
"card_name": self.card_name,
"card_job": self.card_job,
"card_about": self.card_about,
"card_avatar": self.card_avatar,

設置文章是否首頁推薦 (推薦 and 特別推薦 and 首頁推薦)

編寫推薦文章模型類,外鍵關聯文章id   已完成
後臺編寫視圖,點擊添加推薦文章    已完成

回收站

在文章管理頁面刪除文章為邏輯刪除        將status狀態更改為1
status狀態為1的文章將不在後臺和首頁顯示
可以前往回收站頁面,選擇將文章徹底刪除或者恢復

友情鏈接管理

文章采集

在後臺編寫文章采集視圖
接收參數    
    搜索關鍵詞
    采集回來的文章分類
    文章來源    --- 例如:簡書、CSDN

簡書文章搜索接口    https://www.jianshu.com/search/do?q=python&type=note&page=1&order_by=default
    order_by=top            熱門
    order_by=default        默認
    order_by=published_at   最新
    q=python                搜索關鍵詞
    page=1                  頁數

    返回數據

未完成

評論模型

var arr = [
        {id:1,img:"../static/images/img.jpg",replyName:"帥大叔",beReplyName:"",content:"同學聚會,看到當年追我的屌絲開著寶馬車帶著他老婆來了,他老婆是我隔壁宿舍的同班同學,心裏後悔極了。",time:"2017-10-17 11:42:53",address:"深圳",osname:"",browse:"谷歌",replyBody:[]},
        {id:2,img:"../static/images/img.jpg",replyName:"匿名",beReplyName:"",content:"到菜市場買菜,看到一個孩子在看攤,我問:“一只雞多少錢?” 那孩子回答:“23。” 我又問:“兩只雞多少錢?” 孩子楞了一下,一時間沒算過來,急中生智大吼一聲:“一次只能買一只!”",time:"2017-10-17 11:42:53",address:"深圳",osname:"",browse:"谷歌",replyBody:[{id:3,img:"",replyName:"帥大叔",beReplyName:"匿名",content:"來啊,我們一起吃雞",time:"2017-10-17 11:42:53",address:"",osname:"",browse:"谷歌"}]},
        {id:3,img:"../static/images/img.jpg",replyName:"帥大叔",beReplyName:"",content:"同學聚會,看到當年追我的屌絲開著寶馬車帶著他老婆來了,他老婆是我隔壁宿舍的同班同學,心裏後悔極了。",time:"2017-10-17 11:42:53",address:"深圳",osname:"win10",browse:"谷歌",replyBody:[]},
        {id:4,img:"../static/images/img.jpg",replyName:"匿名",beReplyName:"",content:"1”",time:"2017-10-17 11:42:53",address:"深圳",osname:"",browse:"谷歌",replyBody:[{id:3,img:"",replyName:"帥大叔",beReplyName:"匿名111",content:"2",time:"2017-10-17 11:42:53",address:"",osname:"",browse:"谷歌"},{id:3,img:"",replyName:"帥大叔333",beReplyName:"匿名11122",content:"233",time:"2017-10-17 11:42:53",address:"",osname:"",browse:"谷歌"}]},
        ];

id              記錄每條評論的標記
img             頭像地址                                             統一設置默認值
replyName       評論人昵稱                                           如果為null默認是匿名用戶
beReplyName     被回復的評論人昵稱   只有二級評論才有該選項             同上
content         評論內容
time            創建時間
address         ip地址
osname          操作系統
browse          瀏覽器
replyBody       子評論

列表中每一個字典都是一條評論,如果有評論回復改評論,則replyBody又是一個列表,
列表裏面嵌套對應的回復評論,有多少條評論,replyBody列表中就有多少個字典

首頁留言頁面不設回復評論功能
管理後臺設置評論管理,在後臺回復評論
父評論需對應子評論id
子評論beReplyName需對應父評論replyName   缺一不可

http://www.useragentstring.com/?uas={{ua}}&getJSON=all
傳入ua字符串可獲得瀏覽器及系統信息json字符串

設置評論和留言支持emoji表情插入,防止訪客留言時輸入emoji表情導致報錯

設置about_me的字段支持utf8mb4
ALTER table info_adminuser modify about_me text character set utf8mb4 collate utf8mb4_unicode_ci;

設置留言表的字段支持utf8mb4
ALTER table info_gbook modify email varchar(32) character set utf8mb4 collate utf8mb4_unicode_ci;
ALTER table info_gbook modify replyName varchar(32) character set utf8mb4 collate utf8mb4_unicode_ci;
ALTER table info_gbook modify content text character set utf8mb4 collate utf8mb4_unicode_ci;

設置留言表支持utf8mb4
ALTER TABLE info_gbook CHARSET=utf8mb4;

設置文章評論表支持utf8mb4
ALTER table info_comment modify content text character set utf8mb4 collate utf8mb4_unicode_ci;

設置庫支持utf8mb4
SET NAMES utf8mb4;

查看數據庫編碼類型
show variables like ‘character%‘;

在SQL創建數據庫的時候設置CREATE DATABASE myblog CHARSET=UTF8mb4;
只有這樣mysql://user:pass@localhost /db?charset=utf8mb4才能生效

設置數據庫表編碼方式為utf8mb4
class User(Base):    
    __tablename__ = ‘tb_user’       
    id = Column(Integer,primary_key = True,autoincrement=True)    
    name = Column(String(250),nullable=False,unique = True,comment=u"姓名")    
    __table_args__ = {        
        "mysql_charset" : "utf8mb4"
    }

過濾尖括號防止xss

獲取ip問題 
在部署的時候,因為 nginx 配置文件設置了 
proxy_set_header Host $host:80; 
proxy_set_header X-Real-IP $remote_addr; 
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 

因此通過 
from flask import request 
ip=request.headers[‘X-Forwarded-For‘] 
就可以獲取真實 ip

待補充
    根據ip限制每個ip當天只能留言10條,防止使用爬蟲或者第三方工具惡意發布評論

    數據備份/數據恢復

    添加前端顯示emoji表情功能,後臺文章添加emoji表情           已完成

    添加celery異步發起瀏覽器信息獲取請求   暫時無法實現,因為需要獲取到瀏覽器信息才能寫入數據庫

    文章評論管理

Python Flask開源個人博客代碼