百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Python 30 天实战:个人博客网站开发(基础部分)

zhezhongyun 2025-03-08 02:50 55 浏览

经过前面一系列对 Flask、数据库操作以及表单处理等知识的学习,今天我们将把这些知识综合运用起来,开发一个简单的个人博客网站的后端部分,并搭配基础的 HTML、CSS 进行页面布局和样式设计,打造出具备基本外观与功能的博客网站雏形。

一、项目准备

  1. 技术选型与环境搭建:后端框架选用 Flask,它能方便地处理路由、请求和响应等 Web 相关操作。数据库方面继续使用 SQLAlchemy 来连接和操作数据库,这里以 SQLite 数据库为例进行演示(方便本地开发和测试)。前端页面使用 HTML 构建页面结构,CSS 进行样式设计,实现简单的页面布局和美化。
  2. 数据库设计与模型定义(使用 SQLAlchemy)
    首先创建一个表示文章的数据库表模型,代码如下:
from flask import Flask
from sqlalchemy import create_engine, Column, Integer, String, Text
from sqlalchemy.orm import sessionmaker, declarative_base

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = "sqlite:///blog_database.db"
engine = create_engine(app.config['SQLALCHEMY_DATABASE_URI'])
Session = sessionmaker(bind=engine)
db_session = Session()

Base = declarative_base()

class Article(Base):
    __tablename__ = 'articles'
    id = Column(Integer, primary_key=True)
    title = Column(String(100), nullable=False)
    content = Column(Text, nullable=False)

Base.metadata.create_all(engine)


在上述代码中,定义了 Article 类继承自 declarative_base() 创建的基类,该类对应数据库中的 articles 表,包含 id(文章唯一标识,整数类型主键)、title(文章标题,字符串类型且不能为空)、content(文章内容,使用 Text 类型来存储较长的文本,也不能为空)这几个字段。通过 Base.metadata.create_all(engine) 语句让 SQLAlchemy 根据这个模型创建对应的数据库表结构。

二、文章列表展示功能


  1. 后端路由与数据查询逻辑
    在 Flask 应用中定义路由来获取并展示文章列表,代码如下:
from flask import render_template

@app.route('/')
@app.route('/articles')
def article_list():
    articles = db_session.query(Article).all()
    return render_template('article_list.html', articles=articles)


在上述代码中,定义了两个路由(根路由 '/' 和 /articles 路由)都指向 article_list 函数,该函数通过 db_session.query(Article).all() 查询出数据库中所有的文章记录,以列表形式返回,然后将这个包含文章对象的列表传递给 article_list.html 模板进行渲染展示。


  1. HTML 模板设计(article_list.html)




    
    个人博客 - 文章列表
    



    

我的博客文章列表


在这个模板中,首先设置了页面标题等基本信息,并且引入了外部的 CSS 文件(styles.css,后续会介绍样式设计)。然后通过 Jinja2 模板引擎的循环语法 {% for article in articles %} 遍历从后端传递过来的文章列表,为每篇文章生成一个列表项

  • ,列表项中包含文章标题的链接,链接指向文章详情页面(通过 url_for 函数生成对应的 URL,传递文章的 id 参数给文章详情页面路由)。

    三、文章详情页面功能


    1. 后端路由与根据文章 ID 查询逻辑
    @app.route('/article/')
    def article_detail(article_id):
        article = db_session.query(Article).filter_by(id=article_id).first()
        if article:
            return render_template('article_detail.html', article=article)
        return '

    文章不存在

    '


    在上述代码中,定义了 /article/ 路由,用于接收文章的 id 参数,通过 db_session.query(Article).filter_by(id=article_id).first() 从数据库中查询对应 id 的文章记录,如果找到文章则将其传递给 article_detail.html 模板进行渲染展示,若文章不存在则返回相应的提示信息。


    1. HTML 模板设计(article_detail.html)
    
    
    
    
        
        个人博客 - 文章详情
        
    
    
    
        

    {{ article.title }}

    {{ article.content }}


    在这个模板中,展示了文章的标题和内容,标题通过 {{ article.title }} 获取传递过来的文章对象的标题属性进行展示,文章内容则放在一个具有特定类名(article-content,方便 CSS 样式设置)的

    元素中进行展示。

    四、文章发布功能


    1. 表单类定义(使用 Flask-WTF)
    from flask_wtf import FlaskForm
    from wtforms import StringField, TextAreaField, SubmitField
    from wtforms.validators import DataRequired
    
    class ArticleForm(FlaskForm):
        title = StringField('文章标题', validators=[DataRequired(message='标题不能为空')])
        content = TextAreaField('文章内容', validators=[DataRequired(message='内容不能为空')])
        submit = SubmitField('发布文章')
    


    在上述表单类中,定义了文章标题字段(title)、文章内容字段(content),都添加了不能为空的验证规则,还有一个提交按钮字段(submit)用于触发表单提交操作。


    1. 后端路由与表单处理及数据保存逻辑
    from flask import render_template, redirect, url_for
    from flask_wtf import FlaskForm
    
    @app.route('/create_article', methods=['GET', 'POST'])
    def create_article():
        form = ArticleForm()
        if form.validate_on_submit():
            title = form.title.data
            content = form.content.data
            new_article = Article(title=title, content=content)
            db_session.add(new_article)
            db_session.commit()
            return redirect(url_for('article_list'))
        return render_template('create_article.html', form=form)
    


    在上述代码中,定义了 /create_article 路由来处理文章发布相关操作,支持 GET(用于显示文章发布页面)和 POST(用于处理表单提交)两种请求方法。在函数中先创建 ArticleForm 的实例 form,如果表单提交且通过验证,就获取表单中的标题和内容数据,创建一个新的 Article 对象并添加到数据库会话中,提交事务将新文章保存到数据库,最后重定向到文章列表页面。若表单未提交或验证不通过,则渲染 create_article.html 模板展示文章发布页面以及可能的错误提示信息。


    1. HTML 模板设计(create_article.html)
    
    
    
    
        
        个人博客 - 发布文章
        
    
    
    
        

    发布新文章

    {{ form.csrf_token }}

    {{ form.title.label }} {{ form.title }}

    {{ form.content.label }} {{ form.content }}

    {{ form.submit }}


    在这个模板中,创建了一个

    表单元素,设置表单提交方法为 POST,并且渲染了表单类中的各个字段(包括 csrf_token 用于防止跨站请求伪造攻击),用户可以在相应的输入框中输入文章标题和内容,点击提交按钮触发表单提交操作。

    五、简单的 CSS 样式设计(styles.css,示例部分样式)

    body {
        font-family: Arial, sans-serif;
        margin: 0;
        padding: 0;
        background-color: #f4f4f4;
    }
    
    h1 {
        text-align: center;
        color: #333;
    }
    
    ul {
        list-style-type: none;
        padding: 0;
    }
    
    li {
        margin-bottom: 10px;
    }
    
    a {
        text-decoration: none;
        color: #0066cc;
    }
    
    .article-content {
        margin: 20px;
        padding: 10px;
        background-color: #fff;
        border: 1px solid #ccc;
    }
    


    上述 CSS 代码对页面的整体字体、背景颜色、标题样式、列表样式、链接样式以及文章内容展示区域的样式等进行了简单设置,让页面看起来更加整洁、美观。


    通过今天这个综合练习,我们搭建起了一个简单个人博客网站的后端基础部分,实现了文章列表展示、文章详情查看以及文章发布等核心功能,并通过简单的 HTML、CSS 设计让网站具备了基本的外观。后续可以继续在此基础上完善功能,比如添加用户认证、评论功能等,以及进一步优化页面的样式设计。


    #个人博客开发# #Flask 综合应用# #数据库与 Web 应用# #HTML CSS 基础# #Web 功能构建# #Python 项目实战#

  • 相关推荐

    用豆包生成的BMI计算器(豆包的热量是多少?)

    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8&#...

    Android 开发中文引导-应用小部件

    应用小部件是可以嵌入其它应用(例如主屏幕)并收到定期更新的微型应用视图。这些视图在用户界面中被叫做小部件,并可以用应用小部件提供者发布。可以容纳其他应用部件的应用组件叫做应用部件的宿主(1)。下面的截...

    Qt推流(视频文件/视频流/摄像头/桌面转流媒体rtmp+hls+webrtc)

    一、前言说明推流直播就是把采集阶段封包好的内容传输到服务器的过程。其实就是将现场的视频信号从手机端,电脑端,摄影机端打包传到服务器的过程。“推流”对网络要求比较高,如果网络不稳定,直播效果就会很差,观...

    一看就会!谷歌广告转化跟踪详细设置指南来了

    在出海推广业务中,投放广告最常见的目的是获取订单,但我们怎么知道有没有达成投放目的呢?谷歌转化跟踪技术就可以做到!熟悉谷歌的卖家朋友都知道,转化跟踪在最近几年变得越来越复杂了,虽然有很多选项可以自定义...

    Android原生编解码接口MediaCodec详解

    作者:躬行之MediaCodec是Android中的编解码器组件,用来访问底层提供的编解码器,通常与MediaExtractor、MediaSync、MediaMuxer、MediaCrypt...

    手把手搭建RTSP流媒体服务器(rtsp 流媒体)

    0.引言本文主要讲解如何搭建RTSP流媒体服务器的过程,使用开源项目ZLMediaKit。通过这个开源项目,推RTSP流到服务器,然后拉流端可以拉取RTSP、RTMP等流。ZLMediaKit码云链接...

    MediaInfo 24.04.0 是一个关于多媒体文件的信息提供工具

    MediaInfo24.04.0是一个关于多媒体文件的信息提供工具(仅当文件中包含信息时才提供):包括常规信息(标题、作者、导演、专辑、曲目编号、日期、时长等);视频信息(编解码器、画面比例、帧率...

    rmvb格式视频怎么打开,rmvb转MP4认准这个方法

     一、rmvb是什么格式?  RMVB是一种视频文件格式,其中的VB指的是可变比特率。比起上一代的RM格式,RMVB  格式的画面比较清晰,因为它是降低了静态画面下的比特率。  二、制作rmvb  ①...

    教你用Plex Media Server,把铁威马变成你的“私人好莱坞”!

    TNAS(铁威马NAS)中可以安装多媒体服务器、影视、PlexMediaServer、EmbyServer作为个人媒体服务器使用。PlexMediaServer可以组织整理TNAS上的媒体...

    你肯定用过!经典Windows软件被抛弃

    Windows系统这些年持续更新的过程中,不断融入新的软件和功能的同时,一些经典的应用也渐渐成为了历史……Windows媒体播放器被抛弃Windows系统不断地推陈出新,一些老旧的组件也难免被抛弃,在...

    博思得Q8标签打印全能手(博思得标签打印机安装教程)

    2014-12-0905:35:00作者:宋达希【中关村在线办公打印频道原创】服装吊牌、洗涤标签、产品说明标签等都要用到标签打印机,这些标签涵盖多种尺寸的长度和宽度以及材质。另外作为一件商品或者产...

    flv文件用什么播放器打开,这样做不踩雷!

    FLV是FLASHVIDEO的简称,是随着FlashMX的推出发展而来的视频格式。它的出现有效地解决了视频文件导入Flash后,使导出的SWF文件体积庞大,不能在网络上很好的使用等问题。一、...

    media player怎么转换格式?音频转换神器推荐!

    Windowsmediaplayer怎么转换格式?WindowsMediaPlayer是微软公司出品的一款多媒体播放器,通常简称“WMP”。提供了编辑音频和视频文件的功能。用户可以使用该软件导...

    视频参数检查工具更新:MediaInfo 23.10

    MediaInfo提供有关视频或音频文件的技术和标签信息。信息示例包括编解码器、比特率、每秒帧数、宽度、高度、频道数、持续时间、标题、作者、字幕语言和章节名称。多种方式可以查看信息(文本、工作表、树和...

    多媒体管理软件:JRiver Media Center 31.0.68 (64位)

    JRiverMediaCenter64位是适用于大量库的完整媒体解决方案。它组织、播放和标记所有类型的媒体文件,并对Xbox、PS3、UPnP、DLNA和TiVo进行翻录、刻录。JRiverM...