[Django] how to use flake8

2021-03-06 hit count image

Let's see how to use flake8 that is a static code analysis for python on Django project to keep the same code style.

Outline

I have a chance to develop the server-side by Django with other developers. I collaborate with many developers, so we decide to use the static code analysis flake8 to make the code same style and reduce the potential bugs.

In this blog post, we’ll see how to configure the flake8 and how to use it on Django project.

flake8 installation

To use flake8 for Django, we need to install flake8. Execute the command below to install flake8.

pip install flake8

After installaing, don’t forget to save it on requirements.txt.

pip freeze > requirements.txt

Done! we’ve installed flake8.

How to use flake8

We can execute the flake8 with the command below.

flake8

When I executed the flake8 on Django project folder, I can see the result like below.

./venv/lib/python3.8/site-packages/pyflakes/checker.py:153:31: F821 undefined name 'PercentFormat'
./venv/lib/python3.8/site-packages/pyflakes/checker.py:160:9: F821 undefined name 'Generator'
./venv/lib/python3.8/site-packages/pyflakes/checker.py:160:9: F821 undefined name 'PercentFormat'
./venv/lib/python3.8/site-packages/pyflakes/checker.py:180:47: F821 undefined name 'Optional'
./venv/lib/python3.8/site-packages/pyflakes/checker.py:759:35: F821 undefined name 'List'
./venv/lib/python3.8/site-packages/pyflakes/checker.py:760:35: F821 undefined name 'Dict'

the flake8 result is like checker.py:153:31: F821 undefined name 'PercentFormat'. It is FileName:ErroLocation ErrorID ErrorDetail.

How to configure flake8

I use virtualenv to create the virtual enviroment in Django project folder, so the flake8 analyzed virtualenv and I got the error messages like above. It is unnecessary to analyze the viertualenv folder, so I need to configure flake8 to execlude the folder.

To ignore the virtualenv folder by flake8, create .flake8 file in Django project folder and modify it like below.

[flake8]
exclude =
    .git,
    .gitignore,
    *.pot,
    *.py[co],
    __pycache__,
    venv,
    .env

After configuring it, execute the command below to check the configuration works well.

flake8

We can see the result like below unlike previous results.

./petmeeting/settings.py:98:80: E501 line too long (91 > 79 characters)
./petmeeting/settings.py:101:80: E501 line too long (81 > 79 characters)
./petmeeting/settings.py:104:80: E501 line too long (82 > 79 characters)
./petmeeting/settings.py:107:80: E501 line too long (83 > 79 characters)
./petmeeting/settings.py:132:33: W292 no newline at end of file

The flake8 checks many things. But some rules is over-checking the code and makes errors. So I added the below to ignore some rules.

[flake8]
exclude =
    .git,
    .gitignore,
    *.pot,
    *.py[co],
    __pycache__,
    venv,
    .env

ignore =
    E121,
    E126,
    E127,
    E128,
    E203,
    E225,
    E226,
    E231,
    E241,
    E251,
    E261,
    E265,
    E302,
    E303,
    E305,
    E402,
    E501,
    E741,
    W291,
    W292,
    W293,
    W391,
    W503,
    W504,
    F403,
    B007,
    B950,

max-line-length = 200

This rules are from Sider company’s recommend rules.

I think they don’t decide the rules simple. They study the rules and make the recommended rules based on the result of the research. You can see the details on the link below.

Completed

We’ve seen how to configure flake8 and how to use it on Djang project. Also, we’ve configured the flake8 to ignore unnecessary rules and folders. I hope the flake8 helps us to make same style of coding and reduce the potential bugs.

Was my blog helpful? Please leave a comment at the bottom. it will be a great help to me!

Posts