サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大そうじへの備え
tokibito.hatenablog.com
先日、 django-jaのDiscord で出た話題ですが、Djangoで作成したアプリを本番環境で動かす際のアプリケーションサーバーについてです。 具体的にはWSGIとASGIどちらを使うのか、そしてアプリケーションサーバーはどれがよいのか。 WSGIかASGIか DjangoをWSGIかASGIのどちらで動かすかですが、迷うぐらいなら現状はWSGIでいいです。 「ASGIは必要になったら使う」ぐらいの気持ちでいるのをおすすめします。 ASGIは、PythonのAsync(非同期)に対応するための、アプリケーションインターフェースです。 asgi.readthedocs.io WSGIをおすすめする理由は次の通り。 同期処理なのでデバッグしやすい ASGIをおすすめしない理由は次の通り。 非同期処理になるのでデバッグしづらい とにかくこれです。IO待ちの状況では並行で実行されてコンピュ
@c_bata_ さんの著書、『実践Django Pythonによる本格Webアプリケーション開発』をいただいたので紹介します。 実践Django Pythonによる本格Webアプリケーション開発 (Programmer’s SELECTION) 作者:芝田 将翔泳社Amazon 本書の内容 Djangoの基本機能、モデルとクエリ操作、ビュー、テンプレート、フォーム、テスト、認証と認可、Django Rest FrameworkによるAPI開発を実際に動作するコードとともに説明をしています。 特に以下の点はおもしろいと思いました。 テストコードを多く記述している テストコードを始めに書いて、テストをFailにしたあとで、テストコードがSuccessになるよう実装を進めている セキュリティの説明で、実際に問題発生するコードを説明してから、解決方法の説明をしている XSSやCSRF、SQLイン
Djangoフレームワークのセッションの有効期限について調べる必要があったのでまとめておく。 試したバージョンは、Python 3.9、Django 3.2.4。 ドキュメント Djangoのセッションについてのドキュメント https://docs.djangoproject.com/ja/3.2/topics/http/sessions/ Djangoのsettings.pyの設定項目(セッションの部分) https://docs.djangoproject.com/ja/3.2/ref/settings/#sessions セッションのデフォルト設定 Djangoでプロジェクト生成した際のデフォルトの settings.py では、セッションのアプリケーションは有効になっている。 settings.py INSTALLED_APPS = [ 'django.contrib.admin
去年から手伝っていて、今年の4月には公開されていたのですが、Pythonの入門者向けの動画の教材を作っていました。 JMOOCというオンライン講座の1つとして公開されています。 www.fisdom.org 講座はFisdomというプラットフォームで配信されているため、利用には登録が必要ですが、受講料はかかりません。 CMSコミュニケーションズの寺田さんと2人で半分ずつ分担してやってました。 Pythonを学習するための手助けになればいいなと思います。 2020/4/24追記 2020年度分についてはこちらです。 Pythonの入門者向け動画教材2020年4月開講分 - 偏った言語信者の垂れ流し
DjangoのORMで、サブクエリを使う方法について。任意のSQLであればrawメソッドを使えばよいのですが、なるべくORMのAPIを使いたい。 DjangoのORMでは任意の位置にサブクエリを使えるわけではないですが、例えば「テーブル単位での問い合わせ結果にサブクエリで得た列を追加する」ぐらいのことは、annotateメソッドを使ってできます。 サブクエリ側で条件を指定した絞り込みを行う場合、SubqueryとOuterRefを組み合わせるとできます。 Query Expressions | Django documentation | Django モデル Categoryモデルを親に持つ、Itemモデル、という関係性のデータです。 from django.db import models from django.utils import timezone class Category
AWS IoT エンタープライズボタンは、AmazonのDashボタンの汎用のやつ。 IoTボタン www.amazon.co.jp ボタンを押した際にEメール送信、SMS送信、Lambda関数の実行などを設定できる。 ボタンの動作にはWifiネットワークが必須となっている。初期セットアップはスマートフォンのアプリから実行すると簡単でした。 デバイスの管理画面 管理画面は結構シンプル。バッテリー残量もわかるので便利。 IoT 1-Clickの管理画面 開発の流れ デバイスを登録 Lambda関数を用意しておく AWS IoT 1-Clickプロジェクトを作成 実行したいテンプレートを選択(Lambda関数の実行など) プレイスメントを選択(プレイスメントに対し、デバイスを登録する) サンプルコードを用意して試す Lambda関数でSlackに投稿してみるサンプルコードを作成し、試してました
GoogleAppEngineのStandard環境でPython3.7のランタイムがベータ版で利用できるようになったので、試していました。 ドキュメントにはFlaskアプリケーションをデプロイする手順が記載されていましたが、Djangoアプリケーションだと少し設定が追加で必要だったので、メモを残しておきます。 ファイル構成 django-adminツールの startproject コマンドでは、 mysite という名前のプロジェクトを作成しました。 manage.py ファイルの階層にapp.yamlを配置しています。 ├── app.yaml ├── db.sqlite3 ├── manage.py ├── mysite │ ├── __init__.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py ├── requirements.
DjangoフレームワークとVue.jsでアプリケーションを作る例として、テキストを編集保存するシンプルなノートアプリケーションを作ってみました。 github.com Djangoのサーバーサイドレンダリングを使いつつ、Vueを組み合わせる一例として参考になればよいかなと。 Django側はDjango REST FrameworkでAPIを用意していて、意図的にテストコードは用意してません。 JavaScriptのほうは、Vue.jsを使いつつ、なるべくテストコードを書きやすいように作ってみました。 その他詳細は、リポジトリにREADMEがあるので参照してみるとよいかと。 コードに説明のコメントなども入れています。
ホストOSをWindows、VirtualBox上のゲストOSをLinuxとして、VirtualBoxの共有フォルダ機能を使った場合、Linux側で共有フォルダ内にシンボリックリンクを作ろうとすると、デフォルトでは許可されず、エラーが発生します。 vagrant@ubuntu-xenial:/vagrant$ ln -s test.txt test2.txt ln: シンボリックリンク 'test2.txt' の作成に失敗しました: プロトコルエラー Pythonのvirtualenvや、Node.JSのnpmを使うときにシンボリックリンクが使えないと不便なので、これを解消します。試したのはWindows 10、VirtualBox 5.2.8、Vagrant 2.0.2 ※2018/3/12更新: 最初はWeb検索で出てきた情報で試してて、うまくいったように見えたので、その手順を記載して
この記事は Django Advent Calendar 2017 の7日目の記事です。 Djangoのモデルクラスを継承した場合、Metaに特に指定が無ければ、マルチテーブル継承となり、migrateを実行すると2つのテーブルができます。 モデルを継承して単一のテーブルにする方法は2つあります。 親のモデルクラスでMetaに abstract = True を指定する 継承した子クラスでMetaに proxy = True を指定する 今回は後者のproxyを指定する方法を紹介します。 https://docs.djangoproject.com/en/2.0/topics/db/models/#proxy-models この方法は、継承元の親クラスがサードパーティライブラリ等から提供されて、直接書き換えられない場合などに便利です。 継承してproxyを指定したモデル Djangoに組込
この記事は Django Advent Calendar 2017 の6日目の記事です。 tell-kさんの記事 を読んでいて、「そういえばDjangoには組込みのドキュメントジェネレータがあるんで紹介しておこう」と思ったので書くことにしました。 タイトルの通り、 django.contrib.admindocs の紹介です。 Djangoフレームワークの黎明期からこの機能は存在してます。ドキュメントもあります。 The Django admin documentation generator | Django documentation | Django 使い方 settings.pyのINSTALLED_APPSに django.contrib.admindocs を追加する。(django.contrib.adminも必要です) ROOT_URLCONFで指定されているurls.py
9/7~9/10に行われたPyConJP 2017に参加し、『Djangoフレームワークのユーザーモデルと認証』というタイトルで話してきました。 https://pycon.jp/2017/ja/ Djangoフレームワークのユーザーモデルと認証 Djangoの認証まわりを触る前に知っておくとよさそうなことを説明しました。 スライドは、slideshareにアップロードしています。 Djangoフレームワークのユーザーモデルと認証 from Shinya Okano
2017/10/12 追記: API.AIのサービス名はDialogflowに変わりました。 API.AIのContextsとWebhookでChatOps環境を作ってみます。 https://docs.api.ai/docs/concept-contextsdocs.api.ai 今回は、SlackのChatbotとやりとりし、「管理者モード開始」から「管理者モード終了」までのやりとりの間に操作コマンドを実行できるようにします。 インテントを用意する インテントは『管理者モード開始』、『管理者モード終了』、『stats』の3つを用意します。 『管理者モード開始』は、Output contextに「administrator」、User saysに「管理者モード開始」、アクションに「enter_administration」、パラメータとしてpasswordを@sys.anyエンティティで
2017/10/12 追記: API.AIのサービス名はDialogflowに変わりました。 Slackのbotなどを作るときに、API.AIを使うと面白いか便利かもねという話を聞いたので試しています。 api.ai API.AIってどういうものか API.AIの概要は公式ドキュメントの説明がわかりやすいのでそちらを読むのをオススメします。 Basics | Dialogflow 自分が思った要点はこのあたり: 自然言語のテキスト入力を解析、パラメータに変換して外部のWebhookに流せる 日本語にも対応している 定型文で返すのならWebhookに流さなくてもできる感じ SlackなどとのインテグレーションはAPI.AI側でやってくれる Webhookでは簡単なJSONレスポンスを返すことで、api.ai側からインテグレーション先への応答を返してくれる 音声読み上げとの連携もしやすい
PyQというプログラミング学習サービスの紹介と宣伝です。 ↓ これ ↓ 以前、私が勤務していた株式会社ビープラウドが開発しています。 ビープラウドは、Python言語が得意でシステム開発をやってる会社です。connpassというイベントサイトの開発、運営もやってますね。 2019/7/31追記 返金に関して月の途中解約による返金は廃止されたそうです。 料金、定期購読に関する詳しい説明 — Pythonオンライン学習サービス PyQドキュメント 2017/10/2追記 PyQに機械学習、データ分析のコンテンツが追加されました。コンテンツの不足部分が補われたという感じで、より充実したものになっています。 機械学習のコンテンツは、サイボウズ・ラボの西尾さんが監修。Webで検索すれば西尾さんの勉強会等での資料等が見つかりますが、わかりやすい内容だと思いました。 PyQの機械学習コンテンツもやってみ
AWS LambdaがようやくPython3に対応したそうなので試してました。 AWS Lambda Supports Python 3.6 Lambdaを使う際、Pythonランタイムだとchaliceというフレームワークを使うと楽なのですが、Python3サポートに合わせてchaliceもバージョンが上がっていました。 GitHub - awslabs/chalice: Python Serverless Microframework for AWS ChaliceのREADMEも3.6になっていたので、これを試してみました。 手順通りで特に問題なく動いたので、説明は割愛。 コードだけ少し変更してPythonのバージョンを表示させてみることにしました。 app.py: import sys from chalice import Chalice app = Chalice(app_na
devproxyというのを開発時に使っているのですが、便利なので紹介します。 GitHub - moriyoshi/devproxy: A swiss army knife of forward HTTP proxies devproxyは、Webアプリケーション開発向けのHTTPフォワードプロキシです。次のような点で便利です。 /etc/hostsの編集やDNSの設定をしなくても、開発サーバーにドメイン名を指定してでアクセスできる そのため、個々の開発環境に差(VMを使ってたりローカル環境だったり)があっても、概ね同じ手順でツールを利用できる 設定を保存、共有するのが簡単(YAMLファイル) クロスプラットフォームで動作し、実行に必要なファイルも1つなので容易に導入できる HTTPSに対応しているため、開発時にHTTPSスキームでの動作確認などが容易にできる 作者はmoriyoshiさん
Sphinxでlatexpdfjaコマンドを使ってPDFをビルドするには、latexのインストールされた環境が必要になります。 Ubuntuだとtexlive-fullパッケージで必要なパッケージをインストールできるっぽいというのを把握しました。 texlive-fullは依存パッケージがたくさんありサイズが大きいので、Dockerイメージにして使い捨てすると良さそうだと思いました。 調べたらすでに同じようなことをやってる人がいたんですが、Sphinx拡張などいくつか欲しいものが足りなかったので、自分で作ってみました。 DockerHubに置いときました。 tokibito/sphinx-texlive - Docker Hub 使い方 イメージのサイズが圧縮状態で3GBぐらいあって大きいので、試す際はご注意ください。 Sphinxのプロジェクトのディレクトリに移動して以下のコマンドを実行
この記事はpyspa Advent Calendar 2016の7日目として投稿しています。 http://www.adventar.org/calendars/1435 今年、畑を借りました うちの近所には、市民が趣味で農作物を育てたりできる市民農園がいくつかあり、市営、民営で貸し出されています。 私が借りたのは民営のもので、4m×5mの大きさ、使用料は年間1万円程度のものです。自宅から自転車で10分程度の場所(もっと近いところが良かったけど、空きがない)。 今年の春頃に市から募集要項が出ており、7月から使えることになりました。 うちの地域は、市民農園の人気がそこそこあって、この農園だと40区画程度に対して倍率が1.5倍ぐらい。元々抽選で落ちていたのですが、辞退者が出て補欠繰り上がりにより、借りられることになりました。 借りる期間は3年間で、3年経過後は返却し整備された上で次回の募集とい
8年ほど勤務した株式会社ビープラウドを退職しました。 11月から株式会社オープンコレクターに入社します。 www.open-c.jp オープンコレクターという会社は、もりよしが代表で1人の組織でしたが、私とあおだぐが新しく加わって3人になります。 開発や技術支援の案件あればご相談ください。
PyConJP 2016に参加してきました。 スピーカーとして、トーク1つ、ビギナーセッション1つ、オープンスペース2枠で話してきました。 ビギナーセッション(コードリーディング) ビギナーセッションは、講師の応募がなかったそうで、お願いされたのを引き受けて話しました。 Python入門 コードリーディング - PyConJP2016 from Shinya Okano www.slideshare.net os.path、this、antigravityモジュールのコードを読んでみましょう、というものです。 Pythonコードの追いかけ方、pdbの使い方について話しました。 資料は6ページしかないですが、画面上で実際に操作しながら説明しました。 Pythonでpyftpdlibを使ってFTPサーバーを作る際に使ったテクニックの紹介 (トーク) CfPを出して採用されたので話しました。 P
はじめに 普段システムやアプリケーションを作るのに、どういう手順でやるっけかなーというのを書き出してみた、というものです。 必ずしもこの通りにすればうまくいく、というものではなく、一例だと考えてください。 流れ 大雑把に次のような流れになります。 何をしたいのか、まとめる(企画、要件定義) 要件を満たすシステムの入力や出力の詳細、データの流れやシステムの処理をまとめる(仕様策定) 要件、仕様をどうやって実現するのか考えてまとめる(設計) 設計に対応する実装をする、システムを構築する(実装) 実装、構築して出来上がったものが、要件や仕様を満たしているか確認する(試験) 完成 各工程で、アウトプットしたものを後工程で使ったりします。 1. 何をしたいのか、まとめる(企画、要件定義) システムやアプリケーションに限らないですが、そもそも何をするのか決めていないと、始まらないので、やりたいことをま
ngrokはNATやファイヤーウォール以下にあるローカルサーバーを、インターネット越しにアクセス可能にしてくれるサービス。 便利だよと教えてもらったので、試してました。 ngrok.com 無料版の機能はアカウント登録等不要で、ngrokコマンドをダウンロードして実行すると、すぐに使えました。 ngrokコマンドは依存ライブラリ等なしの単一バイナリで、Windows, MacOSX, Linux用のものが配布されています。 公開したいサーバー お試しなので、とりあえずPython3に組み込みのhttp.serverを使ってみます。 $ python3.5 -m http.server カレントディレクトリにはindex.htmlを配置済み。これでlocalhostの8000番ポートでHTTPサーバーが起動します。 このサーバーをngrokで外部から接続できるようにしてみます。 ngrokの
ParquetフォーマットをPythonから扱ってみたいので調べていた。 GitHub - jcrobak/parquet-python: python implementation of the parquet columnar file format. githubにあったものを見つけたけど、まだバグが結構あるっぽい。書き込みなども実装されてないようなので、実用は無理そう。 Parquetフォーマットの仕様は公開されてるから、モジュールを自作しないとダメっぽいかな。 試すだけ試してみた。 インストール snappy圧縮を扱うためにpython-snappyを入れておく。libsnappy-devを入れておかないとインストールでこける。 $ aptitude install libsnappy-dev $ git clone https://github.com/jcrobak/parq
プライベートで使ってるVPSの環境をdocker-composeで動かしたのだけど、忘れてもいいようにメモを残す。 ホストOSは、Ubuntu16.04。 インストール dockerは手順通りaptでインストールすればよい。 Installation on Ubuntu docker-composeは、dockerとは別途インストールが必要(1ファイルのコマンドをダウンロードして配置するだけ) Install Compose dockerコマンドを実行するユーザーはdockerグループに属している必要があるので、インストール後にusermodで設定しておく(usermodで設定したグループは再ログインで反映される) Dockerイメージの準備 DockerHubからpullしてくるか、Dockerfileを作成してビルド(docker build)する。 ビルドの際に、名前の指定をしとかな
FunkLoadはPythonで作られたWebアプリケーション向けの負荷試験ツールです。 レポートがわかりやすいので、負荷試験の際によく利用してます。 便利ではあるのですが、いくつか使いづらい点があったので、funkload-friendlyというラッパーモジュールを作りました。 GitHub - tokibito/funkload-friendly: Friendly wrapper of FunkLoad. Python 2.7のみ対応です(FunkLoadがPython3に未対応) FunkLoadとの違い 大雑把ですが以下、funkload-friendlyで便利にしたところです。 リクエスト間でCookieが保持される(セッションやCSRF対策されたフォームの扱いなどが簡単) REST API(JSON)の扱いが簡単 結果ファイルの出力先にディレクトリを指定できる なるべくFun
Pythonの標準ライブラリに含まれるunittest.mockモジュールの使い方メモ。patchのみ。 試したバージョンは、Python 3.5 テスト対象 main.py import subprocess def say(message): """echoコマンドでmessageを実行する """ return subprocess.call(['echo', message]) def say_hello(somebody): """「Hello, {somebody}!」と画面に表示する関数 """ message = "Hello, {}!".format(somebody) return say(message) if __name__ == '__main__': say_hello("tokibito") 実行すると次のようになる。 $ python main.py He
もう何年もKDiff3ユーザーですが、無料のマージツールならP4Mergeも良いよと聞いたので、少し試してみました。 MercurialやGitのマージツールとして使うため、3-way mergeが前提です。 できるだけ自動解決したいので、うまく自動解決する手段があればそちらを優先します。 マージ対象のコード 今回試したマージ対象のコードは以下の3つです。意図的にコンフリクトが発生するような内容にはしていますが、多人数で同じモジュールを変更するような開発をしていると、しばしばこのような状況は起こるかと思います。 base.py class User: """ユーザークラス """ def __init__(self, name): self.name = name local.py base.pyに対してGroupクラスをファイルの末尾に追記しています。 class User: """ユー
Djangoで複数のデータベースを使う際に、データベースルーター(Database router)を設定すると、モデル毎にデータベースを切り替えたりできます。 Multiple databases | Django documentation | Django データベースルーターが設定されている場合に、アプリケーション側で任意のモデルがどのデータベースを使うのかを取得するには、django.db.routerを使います。 試したバージョンは、Python3.5、Django1.9。 コード myapp/models.py from django.db import models class Item(models.Model): name = models.CharField(max_length=20) myproject/router.py myappという名前のアプリケーションの場
次のページ
このページを最初にブックマークしてみませんか?
『偏った言語信者の垂れ流し』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く