naritoブログ

このブログはDjangoとBootstrap4で作成されました
ソースコード

Djangoで、Pythonエディタを作る②

プログラミング関連 Bootstrap4 Django subprocessモジュール Python 約199日前
2017年4月2日5:09
Bitbucketにソースを置きました。ソースコードはこちらです。
https://bitbucket.org/toritoritorina/django-torina-editor

Djangoで、Pythonエディタを作る①
https://torina.top/detail/342/
に、機能を増やしたりしたものです。

Djangoで、Pythonエディタを作る③
https://torina.top/detail/347/
に、さらなる改良版があります。

DjangoでシンプルなPythonエディタを作ります。
python manage.py runserverとコマンドを打ち、ローカル環境で動かすことを想定しています。
Windows以外だと、動かないです。

Django1.10
Python3.6
で動かしています。Djangoのバージョンは多少前後しても大丈夫だとは思いますが、
Pythonは3.6のf-stringsやsubprocessの新しい機能を使っているため、気を付けてください。


今回は、テキストエディタとしてAceを採用しました。行番号、シンタックスハイライト、なんでもござれです。
https://ace.c9.io/#nav=about


ソースコードは長く、そして汚いので見た目と機能だけの紹介です。


見た目



開くとこのような画面。左側はディレクトリの移動など、真ん中はコード入力、右側は色々表示、下は出力です。




右上のプルダウンは、Pythonのバージョンを選択できます。
これはそもそもDjangoで動くので、Djangoを動かしているPythonインタプリタが「このDjangoを実行しているPython」という名前で初期配置されています。その他のは、settings.pyに書く感じです。




settings.pyにはこんな感じで...これは、早い話がforms.ChoiceFieldのchoicesに渡す形です。
この選択したPythonパスは、「ファイルとして実行」や「venvの作成」、pipボタンの際に参照されることになります。
PYTHON_PATH = [
    (os.path.join('c:', os.sep, 'python36', 'python.exe'), 'python36'),
    (os.path.join('c:', os.sep, 'python35', 'python.exe'), 'python35'),
    (os.path.join('c:', os.sep, 'python34', 'python.exe'), 'python34'),
    (os.path.join('c:', os.sep, 'python27', 'python.exe'), 'python27'),
]




左上の入力欄はディレクトリ名です。フォルダの作成ボタンを押すと..




ちゃんと作成されます。




venvの作成ボタンで、venvで作成されます。




Python36を選んでいるので、Python3.6でのvenvです。




ディレクトリ名をクリックでそのディレクトリへ移動できます。testvenvへ




venvディレクトリ/Scriptsに来ると、「VenvをActivate」というボタンが出てきます。




押してみると、右上のPythonパスも、venvという選択肢が増えました。
この状態でファイルの実行やpipをしても、ちゃんとvenv環境で行われます。




pip-installは単純にpip installを、freezeはpipした一覧を表示、freeze_writeはrequirements.txtを作成します。




真ん中でコードを入力し、すぐ下の現在のコードを保存を押すとその名前で保存されます。
ちょっとしたスクリプトなら、すぐ横のボタンでexec評価で実行できます。
Aceエディタを使っているので、ちゃんとハイライトや補完もされます。





Aceには、pythonファイル用の設定のほか、色々なモードでファイルを開けます。
今のところ、以下の7種類のファイルはAceの専用のモードで開けます。
FILE_TYPE = {
    '.py': 'python',
    '.html': 'html',
    '.css': 'css',
    '.js': 'javascript',
    '.rst': 'rst',
    '.json': 'json',
    '.xml': 'xml',
}




もう少し増やしたくなったら、settings.pyで以下のように定義します。
拡張子名:Aceでのモード名 という形で記述します。
FILE_TYPE = {
    '.java': 'java',
}




また、上記にないファイルタイプのときはデフォルトのモードでファイルを開きます。
デフォルトではplain_textというモードで開くのですが、これをデフォルトでPythonにしたい、等もあるかもしれません。
settings.pyで以下のように変更できます。
DEFAULT_ACE_TYPE = 'python'




ファイルを保存すると上のファイルとして実行ボタンで、python file.py という形で実行されます。
右上のPythonパスを切り替えるだけで、3.6や3.4などバージョンを変えて実行できます。




コードのチェックは、pep8、pylint、pyflakesを行います。
下の出力エリアに、それぞれの結果のタブが表示されるようになります。