The tiny framework based on AIOHTTP
Build your APIs easily
Let me introduce our project, I think he's already moved on to a stage when it can be called a framework. Although its name says that it is boilerplate (maybe in the future, we will change the name). The project is still quite raw, but you can easily build your APIs.
So let's try to show everything by example and build a minimal application that will give the list of posts.
First, let's create a folder where be our project and then set up a virtual environment and install our framework
mkdir example
cd example
python -m venv venv
source venv/bin/activate
pip install aiohttp_boilerplate
Let's create a folder for organizing project files
mkdir app
Then we begin to describe the data model from which validate, deserialize and serialize. For that we use marshmallow.
Create a file schemas.py
from marshmallow import Schema, fields
class PostSchema(Schema):
id = fields.Int()
name = fields.Str()
content = fields.Str()
Create a file models.py
where will be a class which helps us communicate with a database without writing any SQL queries
from aiohttp_boilerplate.models import Manager
class Page(Manager):
table = "post_post"
This set will be enough to create an endpoint through which we can get posts
Create a file views.py
from aiohttp_boilerplate.views.list import ListView
from .models import Post
from .schemas import PostSchema
class PostListView(ListView):
def get_model(self):
return Post
def get_schema(self):
return PostSchema
We also need to specify the path the class to handle a request
Create a file routes.py
from . import views
def setup_routes(app):
app.router.add_route("GET", "/", views.PostListView)
Then we create a file 'main.py' to run the service
from aiohttp_boilerplate.bootstrap import web_app
if __name__ == “__main__”:
web_app()
Since this service communicates with the database, we need to add variables to the environment to connect to the database.
export DB_DATABASE=test
export DB_USER=postgres
export DB_PASSWORD=password
export DB_HOST=localhost
export DB_PORT=5432
If you don't have your own database running, you can run a test database into a docker container.
docker run --rm --name test-postgres -e POSTGRES_PASSWORD=password -e POSTGRES_DB=test -p 5432:5432 -d postgres
Attach to the database concole
docker exec -it some-postgres psql -Upostgres
Create a table
create table post_post
(
id serial
constraint post_post_pk
primary key,
name varchar(50) default '' not null,
content text default '' not null
);
Fill it with data
insert into post_post (name,content) values ('Post 1', 'Content');
insert into post_post (name,content) values ('Post 2', 'Blabla');
All files are ready to launch our service. The structure of the project looks like this.
├── app
│ ├── __init__.py
│ ├── __main__.py
│ ├── models.py
│ ├── routes.py
│ ├── schemas.py
│ └── views.py
└──
Run the application
python -m app
Make a request
➜ http get http://localhost:8080/
{
"count": 2,
"data": [
{
"content": "Content",
"id": 1,
"name": "Post 1"
},
{
"content": "Blabla",
"id": 2,
"name": "Post 2"
}
]
}
The source code of this example you can find here
Building An SVG Map With Vue.js
This article provides a simple example of using Vue.js to work with SVG graphics.
Speaking from mixing roles experience
Not the “best practice” like combining of several roles in the single one person could be very effective for a small team where extra team-member adding may leads to misunderstanding and loss of information.
How to set up Ethereum private network
It seems like the internet has tons of articles on how to set up your own Ethereum private network, but to do this I walked through several problems and decided to write down the full article which includes problems I faced and solutions.