溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python Flask開源個(gè)人博客代碼

發(fā)布時(shí)間:2020-07-10 06:13:34 來(lái)源:網(wǎng)絡(luò) 閱讀:4938 作者:a4demon 欄目:編程語(yǔ)言
沒有寫html模板繼承,有時(shí)間再補(bǔ)吧,或者感興趣的自己抽取一下
博客演示站點(diǎn):http://www.7z1.xyz/
如出現(xiàn)未備案,請(qǐng)直接訪問:http://119.23.230.6/
后臺(tái)管理地址:/admin/login 賬號(hào):admin 密碼:admin
前端代碼鏈接:https://pan.baidu.com/s/1EDDD_ct4eYgxOlpzZw7IVA 密碼:bgc2

解壓密碼:yangqq.com

Python Flask開源個(gè)人博客代碼

Python Flask開源個(gè)人博客代碼

Python Flask開源個(gè)人博客代碼

Python Flask開源個(gè)人博客代碼

安裝過(guò)程:

1. 下載源碼git clone https://github.com/a4demon/flask_blog
2. cd 到項(xiàng)目目錄
3. 根據(jù)自己需要是否創(chuàng)建虛擬環(huán)境,隨后安裝環(huán)境依賴  pip install -r  requirement.txt
4. 創(chuàng)建數(shù)據(jù)庫(kù),注意??!創(chuàng)建數(shù)據(jù)庫(kù)時(shí)需要設(shè)置charset=utf8mb4,具體參照下面的評(píng)論模型有詳細(xì)寫
5. 修改config里面的數(shù)據(jù)庫(kù)賬號(hào)密碼,以及數(shù)據(jù)庫(kù)名
6. 初始化數(shù)據(jù)庫(kù),遷移生成數(shù)據(jù)庫(kù)
   1.  python manage.py db init
   2. python manage.py db migrate
   3. python manage.py db upgrade
7. 導(dǎo)入數(shù)據(jù)庫(kù),導(dǎo)入數(shù)據(jù)庫(kù)之后謹(jǐn)慎起見再重新將數(shù)據(jù)庫(kù)設(shè)置,以及相關(guān)的表字段設(shè)置charset=utf8mb4
8. 安裝redis,并啟動(dòng)redis-server,如果修改為flask自帶的session存儲(chǔ)cookie和session則不需要安裝
9. 運(yùn)行程序

Python Flask開源個(gè)人博客代碼

Python Flask開源個(gè)人博客代碼

Python Flask開源個(gè)人博客代碼

Python Flask開源個(gè)人博客代碼

粗略介紹一下功能,具體功能可以去演示站查看,因?yàn)闆]有抽取模板,可能各頁(yè)面暫時(shí)效果會(huì)有所差距

文章評(píng)論,評(píng)論回復(fù),評(píng)論點(diǎn)贊,評(píng)論管理暫時(shí)沒寫

文章點(diǎn)贊,文章打賞,個(gè)人名片,云詞標(biāo)簽,

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

文章點(diǎn)擊排行,友情鏈接管理,二維碼等聯(lián)系方式展示

文章發(fā)布時(shí)間軸,文章搜索功能暫時(shí)沒寫,分類展示,

文章邏輯刪除與恢復(fù)(既隱藏文章),真實(shí)刪除(從數(shù)據(jù)庫(kù)徹底刪除)

留言管理,所有post提交的數(shù)據(jù)都做過(guò)簡(jiǎn)單處理防止xss

支持emoji表情,對(duì)留言發(fā)布做了簡(jiǎn)單ip限制,防止惡意提交留言

網(wǎng)站信息編輯等等

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

前端代碼從網(wǎng)上下載的,出自www.yangqq.com

留言模塊,云詞標(biāo)簽特效也是從jq22.com下載

文章點(diǎn)贊

 登陸和未登陸:
    未登陸:記錄當(dāng)前cookie,一個(gè)cookie只可點(diǎn)贊一次
    登陸:每個(gè)用戶只可點(diǎn)贊一次,再次點(diǎn)擊取消點(diǎn)贊

評(píng)論功能

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

統(tǒng)一為未登陸,整站為博客網(wǎng)站,不設(shè)用戶注冊(cè)功能,感覺沒有必要,所以所有評(píng)論和回復(fù)皆為匿名評(píng)論

個(gè)人信息配置,寫數(shù)據(jù)庫(kù)模型文件,初始模型,最終已models.py為準(zhǔn)

title           網(wǎng)站標(biāo)題
description     描述信息
keywords        seo關(guān)鍵詞
email           郵箱
wxid            微信公眾號(hào)
wxcode          微信二維碼
butoom_title    底部標(biāo)題
beian           備案號(hào)
about           關(guān)于我
tags            云詞標(biāo)簽    pointer-events在頁(yè)面設(shè)置穿透屬性,這樣鼠標(biāo)事件只會(huì)在設(shè)置auto的標(biāo)簽上生效
"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,

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

編寫推薦文章模型類,外鍵關(guān)聯(lián)文章id   已完成
后臺(tái)編寫視圖,點(diǎn)擊添加推薦文章    已完成

回收站

在文章管理頁(yè)面刪除文章為邏輯刪除        將status狀態(tài)更改為1
status狀態(tài)為1的文章將不在后臺(tái)和首頁(yè)顯示
可以前往回收站頁(yè)面,選擇將文章徹底刪除或者恢復(fù)

友情鏈接管理

文章采集

在后臺(tái)編寫文章采集視圖
接收參數(shù)    
    搜索關(guān)鍵詞
    采集回來(lái)的文章分類
    文章來(lái)源    --- 例如:簡(jiǎn)書、CSDN

簡(jiǎn)書文章搜索接口    https://www.jianshu.com/search/do?q=python&type=note&page=1&order_by=default
    order_by=top            熱門
    order_by=default        默認(rèn)
    order_by=published_at   最新
    q=python                搜索關(guān)鍵詞
    page=1                  頁(yè)數(shù)

    返回?cái)?shù)據(jù)

未完成

評(píng)論模型

var arr = [
        {id:1,img:"../static/images/img.jpg",replyName:"帥大叔",beReplyName:"",content:"同學(xué)聚會(huì),看到當(dāng)年追我的屌絲開著寶馬車帶著他老婆來(lái)了,他老婆是我隔壁宿舍的同班同學(xué),心里后悔極了。",time:"2017-10-17 11:42:53",address:"深圳",osname:"",browse:"谷歌",replyBody:[]},
        {id:2,img:"../static/images/img.jpg",replyName:"匿名",beReplyName:"",content:"到菜市場(chǎng)買菜,看到一個(gè)孩子在看攤,我問:“一只雞多少錢?” 那孩子回答:“23?!?我又問:“兩只雞多少錢?” 孩子愣了一下,一時(shí)間沒算過(guò)來(lái),急中生智大吼一聲:“一次只能買一只!”",time:"2017-10-17 11:42:53",address:"深圳",osname:"",browse:"谷歌",replyBody:[{id:3,img:"",replyName:"帥大叔",beReplyName:"匿名",content:"來(lái)啊,我們一起吃雞",time:"2017-10-17 11:42:53",address:"",osname:"",browse:"谷歌"}]},
        {id:3,img:"../static/images/img.jpg",replyName:"帥大叔",beReplyName:"",content:"同學(xué)聚會(huì),看到當(dāng)年追我的屌絲開著寶馬車帶著他老婆來(lái)了,他老婆是我隔壁宿舍的同班同學(xué),心里后悔極了。",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              記錄每條評(píng)論的標(biāo)記
img             頭像地址                                             統(tǒng)一設(shè)置默認(rèn)值
replyName       評(píng)論人昵稱                                           如果為null默認(rèn)是匿名用戶
beReplyName     被回復(fù)的評(píng)論人昵稱   只有二級(jí)評(píng)論才有該選項(xiàng)             同上
content         評(píng)論內(nèi)容
time            創(chuàng)建時(shí)間
address         ip地址
osname          操作系統(tǒng)
browse          瀏覽器
replyBody       子評(píng)論

列表中每一個(gè)字典都是一條評(píng)論,如果有評(píng)論回復(fù)改評(píng)論,則replyBody又是一個(gè)列表,
列表里面嵌套對(duì)應(yīng)的回復(fù)評(píng)論,有多少條評(píng)論,replyBody列表中就有多少個(gè)字典

首頁(yè)留言頁(yè)面不設(shè)回復(fù)評(píng)論功能
管理后臺(tái)設(shè)置評(píng)論管理,在后臺(tái)回復(fù)評(píng)論
父評(píng)論需對(duì)應(yīng)子評(píng)論id
子評(píng)論beReplyName需對(duì)應(yīng)父評(píng)論replyName   缺一不可

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

設(shè)置評(píng)論和留言支持emoji表情插入,防止訪客留言時(shí)輸入emoji表情導(dǎo)致報(bào)錯(cuò)

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

設(shè)置留言表的字段支持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;

設(shè)置留言表支持utf8mb4
ALTER TABLE info_gbook CHARSET=utf8mb4;

設(shè)置文章評(píng)論表支持utf8mb4
ALTER table info_comment modify content text character set utf8mb4 collate utf8mb4_unicode_ci;

設(shè)置庫(kù)支持utf8mb4
SET NAMES utf8mb4;

查看數(shù)據(jù)庫(kù)編碼類型
show variables like 'character%';

在SQL創(chuàng)建數(shù)據(jù)庫(kù)的時(shí)候設(shè)置CREATE DATABASE myblog CHARSET=UTF8mb4;
只有這樣mysql://user:pass@localhost /db?charset=utf8mb4才能生效

設(shè)置數(shù)據(jù)庫(kù)表編碼方式為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"
    }

過(guò)濾尖括號(hào)防止xss

獲取ip問題 
在部署的時(shí)候,因?yàn)?nginx 配置文件設(shè)置了 
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; 

因此通過(guò) 
from flask import request 
ip=request.headers['X-Forwarded-For'] 
就可以獲取真實(shí) ip

待補(bǔ)充
    根據(jù)ip限制每個(gè)ip當(dāng)天只能留言10條,防止使用爬蟲或者第三方工具惡意發(fā)布評(píng)論

    數(shù)據(jù)備份/數(shù)據(jù)恢復(fù)

    添加前端顯示emoji表情功能,后臺(tái)文章添加emoji表情           已完成

    添加celery異步發(fā)起瀏覽器信息獲取請(qǐng)求   暫時(shí)無(wú)法實(shí)現(xiàn),因?yàn)樾枰@取到瀏覽器信息才能寫入數(shù)據(jù)庫(kù)

    文章評(píng)論管理
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI