匠心精神 - 良心品质腾讯认可的专业机构-IT人的高薪实战学院

咨询电话:4000806560

【PythonWeb】Flask框架实战-如何使用Flask搭建一个简单的博客网站?

【PythonWeb】Flask框架实战-如何使用Flask搭建一个简单的博客网站?

Flask是一个轻量级的Web应用程序框架,其核心思想是用简单的代码实现复杂的Web应用程序功能。本文将介绍如何使用Flask框架搭建一个简单的博客网站,涉及到的技术知识点有:Python、Flask框架、Jinja2模板引擎、SQLAlchemy ORM。

1. 环境搭建

先搭建好Python环境,可以使用官方的Python解释器,也可以使用Anaconda等Python集成开发环境。然后安装Flask和SQLAlchemy模块。

2. 项目结构

在项目目录下新建一个Python文件app.py作为Web应用程序的入口文件,在同级目录下新建一个templates目录用于存放Jinja2模板文件,在同级目录下新建一个models目录和一个database.db文件用于存放数据库模型和数据。项目结构如下图所示:

```
├── app.py
├── models
│   ├── __init__.py
│   └── post.py
├── templates
│   ├── base.html
│   ├── create_post.html
│   ├── edit_post.html
│   ├── index.html
│   └── show_post.html
└── database.db
```

3. 启动Web应用程序

在app.py文件中导入必要的模块和类以及定义Web应用程序的路由函数。路由函数是指定义Web应用程序的URL路径和对应的处理函数之间的映射关系,Flask框架使用装饰器来实现路由函数的注册。

定义Web应用程序的路由函数如下:

```python
from flask import Flask, render_template, request, redirect, url_for
from models.post import Post
from models import db

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///../database.db'
db.init_app(app)

@app.route('/')
def index():
    posts = Post.query.all()
    return render_template('index.html', posts=posts)

@app.route('/posts/')
def show_post(id):
    post = Post.query.filter_by(id=id).first()
    return render_template('show_post.html', post=post)

@app.route('/posts/new', methods=['GET', 'POST'])
def create_post():
    if request.method == 'POST':
        title = request.form['title']
        content = request.form['content']
        post = Post(title=title, content=content)
        db.session.add(post)
        db.session.commit()
        return redirect(url_for('index'))
    else:
        return render_template('create_post.html')

@app.route('/posts//edit', methods=['GET', 'POST'])
def edit_post(id):
    post = Post.query.filter_by(id=id).first()
    if request.method == 'POST':
        title = request.form['title']
        content = request.form['content']
        post.title = title
        post.content = content
        db.session.commit()
        return redirect(url_for('show_post', id=post.id))
    else:
        return render_template('edit_post.html', post=post)
```

其中index()函数返回所有文章列表的HTML页面,show_post()函数返回指定文章的HTML页面,create_post()函数负责处理创建新文章的表单,edit_post()函数负责处理编辑已有文章的表单。

最后在app.py文件中加上如下的主函数以启动Web应用程序:

```python
if __name__ == '__main__':
    app.run(debug=True)
```

4. 模板引擎

Jinja2是一个现代化的Python模板引擎,它能够将动态数据和静态页面相结合以生成HTML文档。在这个简单的博客网站中,我们使用Jinja2作为模板引擎来生成文章列表、文章详情、创建文章和编辑文章的表单。

在templates目录下新建一个base.html模板文件作为Web应用程序的基础模板,所有其他模板文件都要继承base.html模板文件。base.html模板文件包含了网站的公共部分,例如header和footer。在base.html模板文件中使用Jinja2的block和extend指令来定义可替换的部分和引用其他模板文件。

```html



    
    {% block title %}{% endblock %} - Flask Blog


    
    
{% block content %}{% endblock %}
© 2021 Flask Blog
``` 在其他模板文件中使用Jinja2的extends指令来继承base.html模板文件,并使用block指令来重定义可替换的部分。 例如index.html模板文件用于显示所有文章列表,其中包含一个for循环,用于动态生成文章列表。在index.html模板文件中使用Jinja2的for和if指令动态生成HTML元素和判断分支。 ```html {% extends 'base.html' %} {% block title %}Posts{% endblock %} {% block content %}

Posts

    {% for post in posts %}
  • {{ post.title }}
  • {% else %}
  • No posts yet!
  • {% endfor %}
{% endblock %} ``` 其他模板文件的内容可以上Jinja2官方文档中查找相关信息。 5. ORM SQLAlchemy是一个流行的Python ORM库,用于操作关系数据库。在这个简单的博客网站中,我们使用SQLAlchemy作为ORM库来操作SQLite数据库。 在models目录下新建一个__init__.py文件作为models模块的入口文件,用于初始化SQLAlchemy对象,并使用Flask框架中的current_app变量来获取当前应用程序的实例。 ```python from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() def init_app(app): db.init_app(app) ``` 在models目录下新建一个post.py文件作为文章模型文件,包含一个Post类,用于定义文章模型。Post类继承自db.Model类,其中包含了文章的id、标题、内容、创建时间和修改时间等属性。 ```python from datetime import datetime from models import db class Post(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(128), nullable=False) content = db.Column(db.Text, nullable=False) created_at = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) updated_at = db.Column(db.DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow) ``` 在app.py文件中使用models模块初始化SQLAlchemy对象,并在每个路由函数中使用SQLAlchemy对象进行文章的查询、创建和修改等操作。 6. 结语 通过本文的介绍,读者可以学习到如何使用Flask框架搭建一个简单的博客网站,涉及到的技术知识点有Python、Flask框架、Jinja2模板引擎、SQLAlchemy ORM等。这个简单的博客网站可以作为进一步学习Flask框架和Web开发的起点,读者可以在此基础上进一步扩展和深化知识。