DEV Community

Cover image for Flask Delicious Tutorial : Building a Library Management System Part 3 - Routes
Abdur-Rahmaan Janhangeer
Abdur-Rahmaan Janhangeer

Posted on • Edited on

2

Flask Delicious Tutorial : Building a Library Management System Part 3 - Routes

Previous: Part 2: Start With A Loaded Skeleton

I have configured what we need in this repo: DeliciousFlask-3.1. Download it, and run app.py (If you are new to python see Part2).

In this part we explore some concepts related to routes.

If you run the above, app and go to http://127.0.0.1:5000/

you should see

abcd

why? because we said so in app.py:

@app.route('/')
def index():
    return 'abcd'

Alt Text

Let's try http://127.0.0.1:5000/test

we get test ok

Alt Text

As we configured it:

@app.route('/test')
def route_test():
    return 'test ok'

Adding Parameters

if you do http://127.0.0.1:5000/greet/bob you will get:

hi bob

whatever you put after greet, it will always return hi + what you put

That's because Flask allows you to specify parameters. Here's how you do it:

Alt Text

Operations using parameters

Let's say you want to do:

/add/2/3 and you want to get 5

in app.py you will see a function:

@app.route('/add/<a>/<b>')
def add(a, b):
    return '{}'.format(a+b)

But, if you run it, you'll get ... 23

That's because a and b are strings

If you want to get 5, you must convert before adding.

@app.route('/real-add/<a>/<b>')
def real_add(a, b):
    return '{}'.format(int(a) + int(b))

Specifying types in parameters

If you want to get a and b as integers directly, you can do so by specifying the type at the begining:

@app.route('/converted-add/<int:a>/<int:b>')
def converted_add(a, b):
    return '{}'.format(a+b) # no need to convert

If you try converted-add/5/abc you will get errors.

Why do i get # AssertionError: View function mapping is overwriting an existing endpoint function: <name here>?

That's because if you do for example:

@app.route('/')
def index():
    return 'abcd'

@app.route('/test')
def index():
    return 'test ok'

The first and second functions have the same name. You must change the second function's name to something else.

TODO

Add a snippet so that when we do

/multiply/5/3 we get 15

Stay tuned for the next part!

My mail if you don't understand something: arj.python at gmail dot com

Next: Part 4 - Focus On Responses

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay