Published Date : 2020年12月15日20:33

Pythonを使用した税金計算(日本の個人事業主)【Part 3】
Tax Calculation Using Python (Japanese Sole proprietor)【Part 3】


This blog has an English translation


YouTubeにアップした動画の説明記事です。

This is a blog post about a video I uploaded to YouTube.

細かい部分は動画を参考にしてください。

Please refer to the video for details.


目次

Table of Contents




① 動画の説明
① Video Description



警告:

今回説明する給与所得者と個人事業主等の所得税及び住民税を計算するアプリは、あくまで簡易的なお遊び用のアプリです。

正確な数値、計算方法は各自で調べて下さい。

このアプリは大雑把に大体の見積りを計算して楽しむ為のアプリです。

決して従業員の年末調整や個人の確定申告等に使用しないでください。

さらに、税金の計算方法は変更される場合があり、控除についても同様です。

また、控除や税金の計算方法が間違っている可能性もありますので、

あまり信用せずに、各自で調べてから実験してみてください。

このアプリを使って何かしらの損害が発生したとしても、私は一切の責任を負いません。

Warning:

​The app I'm going to show you for calculating income and residence taxes for salaried workers and Individual employers, etc. is just a simple application for playing.

​Please check the exact number and calculation method by yourself.

​This app is used to calculate rough estimates and enjoy them.

​Do not use for year-end adjustment of employees or for individual tax return.

In addition, the method of calculating taxes and deductions may change.

Also, there is a possibility that the deduction and tax calculation methods are incorrect.

Don't trust it too much, and test it yourself.

​I will not be liable for any damage caused by using this app.

ではpipを使用してpandasをインストールしましょう。

Now install pandas using pip.

pip install pandas

ここで、numpyのバージョンに注意が必要です。

Note the version of numpy here.

numpy 1.19.4

この最新のnumpyバージョンが原因で、pandasをインポートしようとするとエラーが起きます。

This latest numpy version causes an error when you trying to import pandas.

RuntimeError: The current Numpy installation ( ....... 

これを解決する為に、numpyのバージョンを下げる必要があります。

To resolve this, you will need to downgrade your version of numpy.

pip install numpy==1.19.3

これで正常にpandasがインポートされました。

So, you have successfully imported pandas.

それでは給与所得者用の計算アプリを仕上げていきましょう。

​Now, let's finish the calculation tool for salaried workers.

views.pyを開き、スクリプトを追加しましょう。

​Open views.py and add the script.

内容は前回のFlaskの時とあまり変わりませんが、AjaxによるPOST通信の送受信方法が少し変化します。

The content is not much different from the last Flask, but ​the transmission and reception method of POST communication by Ajax changes a little.

まず前回使用した社会保険料の表のcsvファイルをプロジェクト直下のDATAフォルダに移動させて、アプリ側から読み込めるように設定します。

First, move the csv file of the table of the last used social insurance premium to the DATA folder directly under the project, and set it so that it can be read from the application side.

続いて、DjangoのQueryDictを使用して、リクエストボディを取得します。

Then use Django's QueryDict to get the request body.

後は、取得したQueryDictオブジェクトからgetを使用して値を取り出す以外は、前回のflaskの時のスクリプトと変わりません。

The rest of the script is the same as it was in the previous flask, except that it uses get to retrieve the value from the obtained QueryDict object.

前回作った計算用のクラスファイルをアプリのフォルダ内に作成し、スクリプトをコピペしていきましょう。

​Let's create a class file for calculation that we made last time in the application folder and copy and paste the script into it.

そしてurls.pyにURLとそれに対応する関数を追加します。

Add the URL and its corresponding function to urls.py.

前回使用した社会保険料の表のcsvファイルをプロジェクト直下のDATAフォルダに移動させます。

Then, move the csv file of the table of the last used social insurance premium to the DATA folder directly under the project.

前回作成したアプリケーションのhtmlをそのままコピペします。

Copy and paste the html of the application you created last time.

CSRF対策の為のワンタイムトークンを埋め込みます。

​Embeds a one-time token for CSRF protection.

プロジェクトのstaticフォルダにこのアプリ用のJSフォルダを用意して、その中に前回作成したAjax用のJSファイルをコピペします。

​In the static folder of your project, set up a JS folder for this app and copy and paste the JS files for Ajax you created previously in it.

Ajax用のCSRF対策のスクリプトを追加してください。

Add a CSRF countermeasure script for Ajax.

index.htmlにJSスクリプトへのパスを記述することを忘れずに。

Remember to include the path to your JS script in index.html.

前回と同じ動作をするかどうかを確認してください。

Check to see if it works the same as before.

CSRF対策がされていない場合、どのようなことが起こるかを確かめてみましょう。

​Let's see what happens if no CSRF measures are taken.

CSRF対策の為のワンタイムトークンが確認できないため、views.pyまでルーティングされません。

​The one-time token for CSRF protection cannot be verified, so it is not routed to views.py.

これを回避する為のもう一つの方法は、Djangoのcsrf_exemptをインポートして、関数をデコレートします。

​Another way around this is to import Django's csrf_exempt and decorate the function.

ユーザーがログインしてサービスを利用するようなサイトだとCSRF対策は必ず行った方が良いので、上記の方法はあまりお勧めできません。

​For sites where users log in and use the service, CSRF measures should always be taken, so the above method is not recommended.

CSRF(クロスサイトリクエストフォージェリ)を簡単に説明すると、ログインした状態のユーザーが攻撃者の攻撃用サイトにアクセス、またはリンク等をクリックした時に、勝手にユーザーのパスワード変更等のような重要な処理を実行させる攻撃の事です。

A brief description of CSRF (cross-site request forgeries) is an attack that when a logged-in user accesses an attacker's attack site or clicks on a link or the like, the user is forced to perform an important process such as changing the user's password.

この動画の趣旨と反するので、CSRFの詳しい内容や仕組み、説明は他のサイトを参照してください。

​It is against the purpose of this video, so please refer to other sites for details, mechanism and explanation of CSRF.

python manage.py runserver

適当に操作して、動作をテストしてみてください。

Then, please operate the application and check.



以上です。お疲れ様です。

That's all. Thank you for your hard work.