[心得]基于Flask技术的web博客开发总结

本文总结了基于Flask技术开发web博客的过程,详细介绍了如何利用werkzeug、jinja2和bootstrap构建功能完善的博客系统。内容涵盖RESTful API设计、用户认证、表单校验、数据库管理等,强调了蓝图blueprint和模板复用在简化路由和提高前端效率方面的作用。同时,提供了Markdown编辑快捷操作的备忘,帮助提升写作效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Flask主要依赖werkzeng和jinja2模板。
werkzeng提供route,debug和web服务,jinja2模板提供网页前端展示功能。
bootstrap是twitter的一个开源框架,它提供的用户界面的组件可以方便地在flask中复用。
表现层状态转移(Representational State Transfer,REST)架构
资源是 REST 架构方式的核心概念。在 REST 架构中,资源是程序中你要着重关注的事物。

开发完一个项目之后,可以用

pip freeze > requirements.txt

来把开发中调用的依赖库dump到一个文件。
当部署时,

pip install -r requirements.txt

就能一下子把所依赖的库装好。

这个博客具备了用户认证,表单校验,用户权限数据库管理,关注关系设定,博客发布,个人主页等功能。

对于每一个功能,首先是从main/views.py下查找对应的路由,然后经过表单验证之后,跳转相应的页面。
这是蓝图blueprint,蓝图的作用是简化路由:

from flask import Blueprint
main = Blueprint('main', __name__)
from . import views, errors

为了使用蓝图,需要采用工厂模式来推迟实例化app:

def create_app(config_name='default'):
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    config[config_name].init_app(app)
    bootstrap.init_app(app)
    mail.init_app(app)
    moment.init_app(app)
    db.init_app(app)
    login_manager.init_app(app)
    pagedown.init_app(app)
    from .main import main as main_blueprint
    app.register_blueprint(main_blueprint)
    from .auth import auth as auth_blueprint
    app.register_blueprint(auth_blueprint, url_prefix='/auth')
    from .api_1_0 import api as api_1_0_blueprint
    app.register_blueprint(api_1_0_blueprint, url_prefix='/api/v1.0')
    return app

这是路由例子:

@main.route('/user/<username>')
def user(username):
    user = User.query.filter_by(username).first()
    if user is None:
        abort(404)
    posts = user.posts.order_by(Post.timestamp.desc()).all()
    return render_template('user.html', user=user, posts=posts)

每一个页面经过jinja2模板的复用之后,可以提高前端编辑效率

{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% import "_macros.html" as macros %}

{% block title %}topcoder - Post{% endblock %}

{% block page_content %}
{% include '_posts.html' %}
<h4 id="comments">Comments</h4>
{% if current_user.can(Permission.COMMENT) %}
<div class="comment-form">
    {{ wtf.quick_form(form) }}
</div>
{% endif %}
{% include '_comments.html' %}
{% if pagination %}
<div class="pagination">
    {{ macros.pagination_widget(pagination, '.post', fragment='#comments', id=posts[0].id) }}
</div>
{% endif %}
{% endblock %}

总的来说,Flask核心很轻量,开发的功能主要是拿已有的一些模块组装在一起。

附录:MD编辑快捷操作备忘

快捷键

  • 加粗 Ctrl + B
  • 斜体 Ctrl + I
  • 引用 Ctrl + Q
  • 插入链接 Ctrl + L
  • 插入代码 Ctrl + K
  • 插入图片 Ctrl + G
  • 提升标题 Ctrl + H
  • 有序列表 Ctrl + O
  • 无序列表 Ctrl + U
  • 横线 Ctrl + R
  • 撤销 Ctrl + Z
  • 重做 Ctrl + Y

可以使用冒号来定义对齐方式:

项目价格数量
Computer1600 元5
Phone12 元12
Pipe1 元234

定义列表

Markdown Extra 定义列表语法: 项目1 项目2
定义 A
定义 B
项目3
定义 C
定义 D
定义D内容

代码块

代码块语法遵循标准markdown代码,例如:
python

通过本编辑器离线写博客(直接在曾经使用过的浏览器中输入write.blog.youkuaiyun.com/mdeditor即可。Markdown编辑器使用浏览器离线存储将内容保存在本地。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值