Flask个人网站博客系统(全)

朋友圈已死,为了方便随时随地的记录心情、想法。我用Flask做了一个网站,功能很多,今天主要讲博客系统,"微博"和长博。

主要内容

1,环境准备

Flask + 文件系统,小站没用数据库,直接读写文件。

2,"微博"页面设计

输入框支持文字加粗、颜色、分段,插入链接、图片、视频。

3,长博页面模板

写长文章的模板,页面设计

4,文件锁

参考数据库锁,防止文件同时被多个进程写入,修改文件流程:拿锁、锁定、释放

5,点赞收藏评论功能

6,管理功能

下面是博客系统的主入口

下面进入正题

1,环境准备

云主机,对于普通的个人小型网站,推荐配置:

  • CPU:1核或2核
  • 内存:2GB或4GB
  • 存储空间:80GB
  • 带宽:2M~4M

提醒,带宽不要选大,多了用不完。假设页面大小为30KB,同时在线10000人,并发量1000人,需要的带宽为30KB×1000=30000KB,约等于30M。

云主机有一个公网IP,这个IP就是网站入口,可不申请域名。也可以申请,将域名和IP绑定。

网站模板,选择Flask,对小白友好。Flask安装很简单,此处略过。

安装好之后,在flask主目录下新建目录:templates、static。

templates:存放网页html文件

static:存放js,css,图片等资源文件

新建main.py文件,配置云主机内网IP。

if name == 'main':

app.run(host='内网IP',port=80)

端口默认80。如果端口被占用,把占用端口的改成其它端口。网站如果不用80端口,访问时要加上端口,太丑。

对于小网站,数据库开销大,直接文件系统或python自带的sqlite3,简单方便。

2,"微博"页面设计

微博用于日常记录,整体用HTML表格设计。

核心代码Jira,HTML完整代码链接

html 复制代码
            <tr><td colspan="10" ><hr style="height:0.2px;border:none;border-top:0.2px dashed lightgray;"></td></tr>
            {% for i in comms['w'] %}
            <tr><td colspan="10" style="text-align: left">

                {% for j in i[1][0] %}<!--文字  http://aitouzi.vip/post/2024/009  -->
                <p style="color:{{j[0]}};font-weight:{{j[5]}};font-size:{{j[6]}}px">{{j[1]}}
                        <!-- 链接 -->
                        <a href="{{j[2]}}" style="color:{{j[9]}}">{{j[3]}}</a>{{j[4]}}
                        <span style="font-size:12px;color:{{j[8]}}">{{j[7]}}</span>
                {% endfor %}

                <div style="text-align:left;margin-left:5%">
                {% for k in i[1][1] %}<!--图片 -->
                <img style="height: {{k[0]}}px;width: {{k[1]}}px" class="thum-img" src="{{k[2]}}" onclick='showBgImg(this)'>
                {% endfor %}

                {% for k in i[1][2] %}<!-- 视频 -->
                <video width="{{k[0]}}" height="{{k[1]}}" controls loop poster = '{{k[3]}}'>
                        <source src="{{k[2]}}" type="video/mp4">
                </video>
                {% endfor %}

                </div>
            </td></tr>
2.1 输入框设计

前端textarea,后端根据关键词解析,首先按img/mp4切分,再按ppp切换,在每一段中继续按关键词clr/link切分,最后再按前端结构拼起来。没有img/mp4/link,默认为空。

2.2 评论功能

点击评论,弹出输入框:

写评论,提交评论。实现方式简单,将评论追加到微博末尾,作为正文一部分。新闻的评论和底部留言不作为正文内容,位于正文下方,参考链接

2.3 点赞收藏

点赞收藏用ajax。点赞传递一个参数type,0表示点赞,1表示收藏。收藏传两个参数type和link,link指当前网页链接。

html 复制代码
        $.ajax({
                type: 'GET',
                url: '/acc',
                dataType: 'json',
                data:{'type':0},
                success: function(res){
                    alert(res[1].status)
                },
                })
        }

3,长博文模板

准备一篇博文之后,以后每次发博就在上篇基础上修改。我用pycharm编辑,很方便。参考链接​​​​​​​

4,文件锁

因为网站没有用数据库,读写注意参考数据库,写前先上锁,写完释放。

用一文件记录文件状态,1表示占用,0表示未占用。如果要写文件时,文件状态是1,需要等文件释放。

python 复制代码
#检查文件是否在使用,如果是则等待
def check_w8(_file):

    res = is_using(_file)
    #文件使用中,等待
    while (res == IN_USE):
        time.sleep(0.1)
        res = is_using(_file)
        #print("等待中")
    return NO_USE

修改文件流程:检查,修改文件为占用,修改文件,修改文件为释放。

5,管理功能

管理功能主要包括:系统监控、修改微博、删除隐藏微博或评论。

系统监控:监控重点模块/进程状态,出现问题发送邮件。

技术实现:CSS 画圆圈+ 心跳消息。

javascript 复制代码
//CSS
.circle {
        display: inline-block;
        margin-left: 5px;
        width: 10px;
        height: 10px;
        border-radius: 50%;
        background-color: {{clr}};
        margin-right: 5px;
    }

//Javascript 心跳消息,1分钟检查一次,异常时前端修改颜色,后端同时发邮件通知
function heartbeat() {
    $.ajax({
        url: '/heart',
        type: 'GET',
        success: function(res) {
            const circle = document.getElementById('cct');
            if (res.status == 0) {circle.style.backgroundColor = 'red';}
            else {circle.style.backgroundColor = '#00FF00';}
        },
    });
}

setInterval(heartbeat,60000)

发微博、长博、图片、视频,有评论、点赞、收藏、删除和管理功能,基本能满足个人记录需求。

以上是做网站的主要内容,如果有其他疑问,可以留言讨论。

相关推荐
B站计算机毕业设计超人14 分钟前
计算机毕业设计Hadoop+大模型空气质量预测 空气质量可视化 空气质量分析 空气质量爬虫 Spark 机器学习 深度学习 Django 大模型
人工智能·hadoop·爬虫·python·深度学习·spark·数据可视化
超雄代码狂44 分钟前
python面向对象基础入门
开发语言·python
向上的车轮1 小时前
ODOO学习笔记(7):模块化架构(按需安装)
笔记·python·学习·架构·odoo
DarkAthena2 小时前
基于语法树的SQL自动改写工具开发系列(2)-使用PYTHON进行简单SQL改写的开发实战
数据库·python·sql
Python私教2 小时前
ubuntu22 安装 minikube
linux·python
Luke Ewin2 小时前
开源的说话人分离项目 | 可以对指定的音频分离不同的说话人 | 通话录音中分离不同的说话人
python·开源·音视频·语音识别·说话人分离·说话人归类
竹子与牛2 小时前
Python教程笔记(2)
python
哆啦叮当2 小时前
OrienterNet在二维公共地图实现视觉定位的模型
python·深度学习·cnn
国通快递驿站2 小时前
AntFlow:一款高效灵活的开源工作流引擎
java·spring boot·后端·开源·钉钉