Building a Blog with Flask

Building a Blog with Flask

Table of contents

No heading

No headings in the article.

Flask is a lightweight Python web framework that allows developers to easily build web applications and websites. One popular use case for Flask is building a blog. This article will go through the steps to build a simple blog using Flask.

First, we must install Flask and set up our project structure. To install Flask, use the following command:

pip install flask

Next, create a folder for your project and create a file called app.py inside it. This will be the main entry point for our Flask app.

In app.py, import Flask and create a new instance of the Flask class:

from flask import Flask

app = Flask(__name__)

Now, we can create a route for our homepage. A route is a URL that our app listens to and responds to with a specific function. In our case, we will create a route for the homepage at the URL /.

@app.route('/')
def homepage():
    return 'Welcome to my blog!'

To run our app, we can use the flask run command. This will start a development server at localhost:5000. If we visit this URL in our web browser, we should see the message "Welcome to my blog!" displayed.

Next, we will need to set up a database to store our blog posts. For this example, we will use SQLite, which is a simple, file-based database. First, we will need to install the Flask-SQLAlchemy extension, which provides an interface to SQLite for Flask. Use the following command to install it:

pip install flask-sqlalchemy

Next, in app.py, import Flask-SQLAlchemy and create a new instance of the SQLAlchemy class:

Copy codefrom flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
db = SQLAlchemy(app)

We will also need to configure Flask-SQLAlchemy to use our SQLite database. In app.py, add the following code to set the database URI:

Copy codeapp.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///blog.db'

Now, we can create a model for our blog posts. A model is a class that represents a table in the database. In, create a class called Post with the following code:

Copy codeclass Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), nullable=False)
    content = db.Column(db.Text, nullable=False)
    created_at = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)

This model has four fields: id, title, content, and created_at. The id the field is the primary key, which is a unique identifier for each post. The title and content fields are the title and content of the post, respectively. The created_at field is the date and time the post was created.

Next, we can create a route to display a list of all the blog posts. In `app.py, add the following code:

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

This route will use the Post model to retrieve all the posts from the database and pass them to the posts.html template.

We will also need to create the posts.html template. In the templates folder, create a new file called posts.html and add the following code:

Copy code{% for post in posts %}
    <h2>{{ post.title }}</h2>
    <p>{{ post.content }}</p>
{% endfor %}

This template will loop through the posts list and display the title and content of each post.

We can also create a route to display a single post. In app.py, add the following code:

Copy code@app.route('/posts/<int:post_id>')
def post(post_id):
    post = Post.query.get(post_id)
    return render_template('post.html', post=post)

This route will use the Post model to retrieve a single post by its id and pass it to the post.html template.

Create the post.html template in the templates folder and add the following code:

Copy code<h2>{{ post.title }}</h2>
<p>{{ post.content }}</p>

This template will display the title and content of the post.

Finally, we can create a route to create new blog posts. In, add the following code:

Copy code@app.route('/create', methods=['GET', 'POST'])
def create():
    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('/posts')
    return render_template('create.html')

This route will handle both GET and POST requests. If it is a GET request, it will render the create.html template. If it is a POST request, it will create a new Post object with the submitted title and content, add it to the database, and then redirect to the /posts route to display the list of posts.

Create the create.html template in the templates folder and add the following code:

Copy code<form action="/create" method="post">
    <label for="title">Title:</label><br>
    <input type="text" id="title" name="title"><br>
    <label for="content">Content:</label><br>
    <textarea id="content" name="content"></textarea><br>
    <input type="submit" value="Submit">
</form>

This template will display a form for the user to submit a new blog post.

With these steps, we have created a simple blog using Flask. We can now create, view, and list blog posts using our app.

There are many other features we can add to our blog, such as authentication for creating and editing posts, pagination for long lists of posts, and tagging posts for easier organization. However, the steps outlined in this article provide a solid foundation for building a basic blog with Flask.

In summary, to build a blog with Flask, we need to:

  1. Install Flask and set up the project structure

  2. Create routes for the homepage and post lists and templates to render the content

  3. Set up a database using Flask-SQLAlchemy and create a model for our blog posts

  4. Create a route and template for creating new posts

  5. Add any additional features, such as authentication and pagination.

With these steps, we can easily build a functional blog using Flask.