Python Flask开源个人博客代码

没有写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:[email protected] /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异步发起浏览器信息获取请求   暂时无法实现,因为需要获取到浏览器信息才能写入数据库

    文章评论管理

原文地址:http://blog.51cto.com/2052654/2298003

时间: 2024-08-30 05:00:26

Python Flask开源个人博客代码的相关文章

用flask开发个人博客(4)—— flask中4种全局变量

https://blog.csdn.net/hyman_c/article/details/53512109 一  current_app current_app代表当前的flask程序实例,使用时需要flask的程序上下文激活,我们以本专栏第一篇文章中写的test.py为例介绍下它的用法: 1.1 激活程序上下文 [python] view plain copy >>> from test import app >>> from flask import curren

使用python爬取csdn博客访问量

最近学习了python和爬虫,想写一个程序练练手,所以我就想到了大家都比较关心的自己的博客访问量,使用python来获取自己博客的访问量,这也是后边我将要进行的项目的一部分,后边我会对博客的访问量进行分析,以折线图和饼图等可视化的方式展示自己博客被访问的情况,使自己能更加清楚自己的哪些博客更受关注,博客专家请勿喷,因为我不是专家,我听他们说专家本身就有这个功能. 一.网址分析 进入自己的博客页面,网址为:http://blog.csdn.net/xingjiarong 网址还是非常清晰的就是cs

【python】获取51cto博客的文章列表

python的正则与网页操作练习二: import re import urllib.request #51cto urlcode=gb18030 class down51web: s_url='' s_blogid='' s_blogpages='' s_html='' s_code='' def __init__(self,url,code): self.s_url=url self.s_code=code def get_html(self): self.s_html=urllib.req

Python爬虫爬取博客园并保存

Python爬虫爬取博客园并保存        爬取博客园指定用户的文章修饰后全部保存到本地 首先定义爬取的模块文件: crawlers_main.py 执行入口 url_manager.py url管理器 download_manager.py 下载模块 parser_manager.py html解析器(解析html需要利用的内容) output_manager.py 输出html网页全部内容文件(包括css,png,js等) crawlers_main.py 执行入口 1 # coding

博客代码:iframe—网页中嵌入其他网页

iframe 是一个可以把另外一个网页嵌入到一个网页里的代码,非常有用.对于一个内容不错的网页,要方便地把它搬到自己的博客里,用这个代码最合适.而对于在新浪博客里不支持的一些网页效果和代码,可先把他们设置好,在支持他们的网站上使用,或上传到一个免费的网络空间或网络硬盘里,获取相应的网页地址,然后用 iframe嵌入到新浪博客里,非常好用! 一.固定位置的iframe代码: <DIV align=center><IFRAME src="http://weather.265.com

博客代码美化(SyntaxHighlighter)

这篇博文主要讲解自己使用SyntaxHighlighter对代码进行美工中遇见的问题以及如何使用SyntaxHighlighter? 首先来看看SyntaxHighlighter对代码美工的效果吧! 2015年8月23日以前贪玩小神个人博客代码效果如下: function helloSyntaxHighlighter(){return "hi!";} 使用SyntaxHighlighter美化代码效果如下: ? 1 2 3 4 5 6 function helloSyntaxHighl

Python爬取CSDN博客文章

之前解析出问题,刚刚看到,这次仔细审查了 0 url :http://blog.csdn.net/youyou1543724847/article/details/52818339Redis一点基础的东西目录 1.基础底层数据结构 2.windows下环境搭建 3.java里连接redis数据库 4.关于认证 5.redis高级功能总结1.基础底层数据结构1.1.简单动态字符串SDS定义: ...47分钟前1 url :http://blog.csdn.net/youyou1543724847/

Flask之十——博客文章

1. 提交和显示博客文章 app/models.py: 博客文章模型 class Post(db.Model): __tablename__ = 'posts' id = db.Column(db.Integer, primary_key=True) body = db.Column(db.Text) timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow) author_id = db.Column(db.I

Python+webdriver爬取博客园“我的闪存”并保存到本地

前篇 用webdriver+phantomjs实现无浏览器的自动化过程 本篇 想法与实现 我想要将博客园“我的闪存”部分内容爬取备份到本地文件,用到了WebDriver和Phantomjs的无界面浏览器.对于xpath的获取与校验需要用到firefox浏览器,安装firebug和firepath插件.代码如下: # -*- coding: utf-8 -*- import os,time from selenium import webdriver from selenium.webdriver