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

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

gaoyangw 2025-01-11 12:53 41 浏览 0 评论

经过前面一系列对 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)
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>个人博客 - 文章列表</title>
    <link rel="stylesheet" type="text/css" href="styles.css">
</head>

<body>
    <h1>我的博客文章列表</h1>
    <ul>
        {% for article in articles %}
        <li><a href="{{ url_for('article_detail', article_id=article.id) }}">{{ article.title }}</a></li>
        {% endfor %}
    </ul>
</body>

</html>


在这个模板中,首先设置了页面标题等基本信息,并且引入了外部的 CSS 文件(styles.css,后续会介绍样式设计)。然后通过 Jinja2 模板引擎的循环语法 {% for article in articles %} 遍历从后端传递过来的文章列表,为每篇文章生成一个列表项 <li>,列表项中包含文章标题的链接,链接指向文章详情页面(通过 url_for 函数生成对应的 URL,传递文章的 id 参数给文章详情页面路由)。

三、文章详情页面功能


  1. 后端路由与根据文章 ID 查询逻辑
@app.route('/article/<int:article_id>')
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 '<h1>文章不存在</h1>'


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


  1. HTML 模板设计(article_detail.html)
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>个人博客 - 文章详情</title>
    <link rel="stylesheet" type="text/css" href="styles.css">
</head>

<body>
    <h1>{{ article.title }}</h1>
    <div class="article-content">
        {{ article.content }}
    </div>
</body>

</html>


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

四、文章发布功能


  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)
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>个人博客 - 发布文章</title>
    <link rel="stylesheet" type="text/css" href="styles.css">
</head>

<body>
    <h1>发布新文章</h1>
    <form method="post">
        {{ form.csrf_token }}
        <p>{{ form.title.label }} {{ form.title }}</p>
        <p>{{ form.content.label }} {{ form.content }}</p>
        <p>{{ form.submit }}</p>
    </form>
</body>

</html>


在这个模板中,创建了一个 <form> 表单元素,设置表单提交方法为 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 项目实战#

相关推荐

义乌推广营销公司seo,霸屏推广多少?

推广营销公司SEO是指通过优化网站内容、结构和关键词,提高网站在搜索引擎中的排名,以吸引更多的潜在客户和流量,从而实现营销目标。...

搜索效果差,试试这几个办法

搜索质量差,找不到所需内容时,可以尝试以下几种方法:换搜索工具;优化关键词;使用搜索指令;多看一些结果。1、换搜索工具搜索效果差,那就换个搜索工具,看看其它搜索引擎的结果。...

铲除网站死链接详细操作指南

死链接会危机网站的安全,死链接的存在意味着网站存在毛病。首先要认识HTTP状态码含义:不能访问的链接称为死链接。当我们访问我们网站页面的时候,它会返回一个三位数的信号给我们的浏览器。比如我打电话给你,...

想要网站快速地被收录,你试过这些方法了没?

做网站优化的,都有一个共同的梦想那就是想要网站可以快速地被搜索引擎收录,而且收录量还要大。然而现实总是残酷的,在现在这搜索引擎算法中不使用作弊的手法情况下,想要网站达到秒收录绝不是网上那些随便说的一些...

百度收录URL无标题泛目录站群系统

尽量使用满年备案米或者历史备案米,白板备案米需要强引蜘蛛,历史米可以保留主站直接开目录本地先操作(服务器操作也是可以)1:本地先配置关键字,其它不用管,一行一个。2:data/url这个文件夹设置自己...

网站快速收录工具大公开!用对方法流量轻松翻倍

大家都知道,搜索引擎可是网站流量的关键入口。要是网站的URL不能及时被收录,哪怕内容再好,也很难获得满意的曝光量。不过别担心,147seo新推出了一款超实用的URL批量推送收录工具,而且它支持...

利用专题页打造关键词排名绿色通道

很多朋友在做SEO的时候,经常会遇到大量长尾词没有排名,针对性的做了大量的工作,但是作用不大,关键词仍旧难以上来,非常纠结。今天悟道SEO跟大家分享一下利用专题页面,为你的大量长尾关键词开通排名绿色通...

如何解决关键词排名急剧下降的方法

1、搜索引擎自身的原因搜索引擎的算法时常都会有细微的改变,这样或多或少的会影响到网站排名,这种情况有的时候过几天就恢复了,有的一直不会恢复。解决办法:对于这种原因,你先要分析下原因,并且到大型的seo...

网站关键词排名:网站排名上不去怎么办?

多数企业都知道,网站优化很重要,网站关键词排名也是。咱们都希望站点收录更多更快,但是很多企业网站建成后,只被收录,排名却上不去,一点流量都没有。而且网站关键词排名老是出现较大波动,时高时低,让人琢磨不...

郑州企业网站关键词排名最专业的公司

网站的关键词排名在当今时代,却受到了人们更高的关注率。因为网站的关键词排名,会直接影响到网站曝光率、点击率和访问量,尤其是企业网站,会直接决定该企业网站的潜在意向客户资源的积累量。现在上网的人几乎都...

关键词如何快速排名

关键词如何快速排名关键词排名是指在搜索引擎中,某个关键词对应的网页在搜索结果中的位置。在互联网时代,关键词排名对于网站的流量和曝光度至关重要。然而,随着搜索引擎算法的不断升级和优化,关键词排名变得越来...

网站关键词排名会被哪些操作影响?

  相信各位做网站优化的朋友们都知道一件事是,内容为王,很多朋友为了达到这一目的,埋头苦干,但是还是没有排名,这是为什么呢?网站关键词排名会被哪些操作影响?那么,接下来小编就跟大家分享下影响网站关键词...

核心关键词排名一夜消失?未被惩罚的网站如何应对幽灵降权!

深夜的流量监控面板上,原本稳定的核心关键词排名突然集体下滑。没有警告邮件,GoogleSearchConsole后台也没有任何人工处罚记录——这正是让众多网站管理者困惑的"幽灵更新"...

SEO关键词优化全攻略,从选词到排名的实战技巧

做SEO的小伙伴们肯定都有个头疼的问题:到底怎么优化关键词才最有效呢?别急,当你弄清楚目标关键词和长尾关键词的区别,学会挖掘长尾词之后,就该正式开启关键词优化之旅啦!...

SE排名与Moz:找到正确的搜索引擎优化工具,用于2025

厌倦了搜索引擎优化工具,没有真正帮助你发展?如你计划2025年的战略,找到正确的平台,可以改变一切。两个名字你可能遇到:SE排名与Moz.两者都提供的功能等级跟踪关键的研究,并建立链接,但他们适...

取消回复欢迎 发表评论: