utamaro’s blog

誰かの役に立つ情報を発信するブログ

python

pythonを使ってファクトリメソッドパターンを実装する方法について

python を使ってファクトリメソッドパターンの実装をした際に試した内容です。 ファクトリメソッドパターンの作り方としては二通り知っていますが、そのうちの「カテゴリによって実行するインスタンスを決める」方法の実装を紹介します。 今回はデコレータを…

指定したキーをdictから再帰的に検索して削除する方法

Djangoを使っているなかで、apiのテストをする際に特定のkeyを取り除きたいということがありました。 例えば、レスポンスにcreated_atが含まれている場合、レコードが作成された日が入ると、assertDictEqualでは期待値と一致しないためエラーとなってしまい…

pythonを使ってツイートをlikeした人の一覧を取得する方法

twitter apiを利用して自身のツイートをいいねしたユーザの一覧を取得します。 このapiは2021年7月6日段階でtwitter-pythonライブラリには実装されていませんでした。 なのでrequestsライブラリとrequests_oauthlibを利用してAPIを実行します。 環境 Product…

2021年版 pythonの開発環境を整える

概要 pythonの開発環境を整えて、スクリプトを実行できるのを目標にします。 pythonの開発環境ですが、2021年7月現在で私が使用している構成を基にご紹介します。 私の場合は、pyenvで任意のバージョンをインストールし、venvを使ってローカル環境を作成して…

DjangoでPageNotFound時にjsonを返す方法

Djangoでapiを作っている際に、自分で定義していないpathをリクエストしたところ404ページが表示されました。 apiを使うため、これをjsonで返すように変更したいと考えて、実現する方法を調べてみました。 参考にしたページ一覧 Error handling https://docs…

alembicで環境別にマイグレーションファイルを分割する

alembicというマイグレーション管理ライブラリを利用したマイグレーションファイルの分割方法について。 実現したいのは、開発環境のrevisionと本番環境用のrevisionを分けたいということです。 分けることで、リリースタイミングですべてのテストが完了した…

Flaskで共通的なpath変数を検証する方法

/api/<lang_code>/sampleのようなurlが用意されている場合、lang_codeはすべてのurlで利用する場合を想定します。 このとき、controller側でパタメータを取得し、検証する方法もあります。 ただし、すべてのcontrollerで同じ処理を書いてしまうのは避けるべきことです。</lang_code>…

mysqlclientを使ったらdyldエラーが起きた

from MySQLdb import _mysqlが書かれたpythonファイルを実行したら以下のエラーが発生しました。 Traceback (most recent call last): File "main.py", line 1, in <module> import MySQLdb as _mysql File "/lib/python3.8/site-packages/MySQLdb/__init__.py", lin</module>…

61.DjangoBasicAppsのCommentsを読んでみる

urls.pyには目新しいものがなかったのでスルーします。 urlを使ってbooksと同じように作成されていたのでスルーします。 1つだけわかったことは、viewの引数にはviews.py内のメソッドを入れるということ。 views.pyを確認する コメント時の日付をバリデーシ…

60.DjangoBasicAppsという数年前のプロジェクトのBooksを読んでみる

DjangoBasicAppsのリポジトリは↓です。 https://github.com/nathanborror/django-basic-apps その中にあるBooksを読んで、Djangoの書き方を確認したいと思いました。 https://github.com/nathanborror/django-basic-apps/tree/master/basic/books views.pyが…

59.DjangoのでTwythonを使ったOAuthのサンプルを読んでみた。

参考にしたプロジェクトは↓です。 https://github.com/ryanmcgrath/twython-django Twythonを使ってTwitterのAPIを利用することができるようです。 An example Django application to showcase how to use OAuth with Twitter in Django using Twython. と書…

Djangoのサンプルを覗いて使い方を勉強してみたときのメモ

django-realworld-example-appを参考にする このプロジェクトは一番最初に参考にしたものです。 Djangoのバージョンが1.10.0と古い(記事を書いている段階での最新は2.1.5が最新)です。 https://github.com/gothinkster/django-realworld-example-app このプ…

Djangoの管理画面でBootStrap臭がひどいので消すことにした。

管理画面のBootStrap臭がひどいので消すことにしました。 アドミン機能はとても便利です。 DB内のデータをモデルを使ってCRUD操作できるので、編集が簡単です。 でも、個人的にはDB内のデータを操作する際は、専用のクライアントツールを使いたい派です。 po…

Djangoのモデルに定義していないフィールドを追加する方法

こんな感じのModelを定義しているときに、追加でフィールドを入れたくなったときがありました。 class Sample(models.Model): uuid = models.UUIDField(unique=True) created_at = models.DateTimeField(auto_now_add=True) modified_at = models.DateTimeFi…

Djangoでページングを表示するための関数

Djangoでページング処理を作成する際に作った関数を紹介します。 コードの紹介になるので、紹介はコードにコメントにて行います。 前後のページを表示するための関数 # self.limit: データ表示数 def page_data(self, count, page): # count: データ数 # pag…

pythonでjwtを使う際に作ったutilについて

作成したjwtのutilを紹介します。 作成したutilですが、まだまだ修正途中のものです。使用する場合は注意してください。 jwtについての詳細についてはこちらを参照してください。 https://jwt.io/introduction/ コードと解説の距離が離れると読みづらいと思…

pythonを使ってcsvのファイルを生成する方法

pythonを使ったcsvのファイルを生成する方法を紹介します。 この記事では、csvの読み込みは扱いません。csvファイルを作成する方法を紹介しています。 csvを扱うための便利なライブラリをインストールします。 pip install pandas csvを読み書きするためにpa…

mecabを使って解析する方法

mecabのインストール方法等はいろいろなサイトに書かれているので、pythonのプログラミング部分を紹介します。 意外と実装について書かれてる記事が少なくてびっくりしました。なので、help()を使って使い方を試しました。 以下の環境で作業しています。 mac…

DjangoでCSRFを含んだリクエストをtagを使って実行する方法

CSRFトークンを含んだAPIの実行方法で、ドキュメントに載っているような方法ではなく、tagを使った方法を紹介します。 tagを使った方法というのは、{% cookie 'csrftoken' %}でhtml内にtokenを入れて、その値を使う方法です。 修正が必要な箇所は以下の3箇所…

DjangoでSerializerを使ったバリデーション方法について DjangoではRestApiを作成するための便利なライブラリとしてDjango REST frameworkというものがあります。 このライブラリを使うと、簡単にapiを作成することができます。 この記事ではDjango REST fra…

lxmlを使ったxmlのパース方法

lxmlというライブラリを使ってxmlをパースしたときのメモを記事にしています。 lxmlはBeautifulSoupというスクレイピングのライブラリでも使われたりしなかったりします。 xmlファイルを取得する pythonでファイルを読み込む方法はいろいろありますが、再帰…

stackoverflowのapiをpythonで使ってみた

stackoverflowのoauthを試してみたので、そのときにやったことを紹介します。 基本的なステップについてはすべてドキュメントにかかれていたので、試す際に書いたコードを載せます。 ドキュメントはこちらです。 https://api.stackexchange.com/docs/authent…

Djangoのテンプレート内でcloudinaryのディレクトリを指定して画像を表示する

Djangoを使って、cloudinaryで保存している画像を表示する場合、{% cloudinary %}を使用します。 その際に、ファイル名を指定することができるのですが、ファイル名のみだとディレクトリ分けしていた場合表示されません。 そこでなんとかディレクトリを指定…

Djangoでtwitter認証をしたあとにツイートする方法

前提として、social-auth-app-djangoを使ってtwitterでの認証が実装できている状態とします。 class TwitterPost(TemplateView): post_api = "https://api.twitter.com/1.1/statuses/update.json" def post(self, request, *args, **kwargs): social_user = …

Djangoのtemplate内でクエリパラメータを設定する方法

Djangoのtemplate内で以下のように書いているときに、リンク先をクエリパラメータで渡すときの方法です。 <li><a href="{% url 'home' %}">next</a></li> 渡したいパラメータはpとします。値は整数です。 まず、一番簡単な方法を紹介します。 <li><a href="{% url 'home' %}?p=1">next</a></li> この方法はシンプルですが、パラメータが増えたとき…

pythonを使ってディレクトリのツリー構造をjsonで表示してみた

何に使えるのかわかりませんが、ディレクトリのツリー構造をjsonで表現するプログラムを紹介します。 サンプルとして用意したティレクトリ構造が以下のものです。 このディレクトリのtreeをjsonにしたいと思います。 dir/ ├── dir2 │ ├── file1 │ └── file2 …

pythonで楽天apiを実行する方法

楽天の会員登録をする これは登録画面に沿って登録をするだけです。 登録画面のurlを載せます。 【楽天】ログイン 楽天のアプリIDを発行する アプリURLはhttp://localhost.comで登録しました。 やり方を調べたところ、自分のgithubのurlを入れるというのも見…

Djangoでcssファイルから画像ファイルを読み込む方法

Djangoでcssファイルから画像ファイルをurlで指定する方法について紹介します。 やることは簡単です。 Djangoの設定ファイルで以下のような設定をしていると思います。 STATIC_URL = '/static/' STATIC_ROOT = 'staticfiles' この設定をしている場合、static…

pythonのファイルをherokuで定期的に実行する方法

この記事ではpythonのファイルに書かれたprint()を定期的に実行する方法を紹介します。 ↓のページを参考にしています。 https://devcenter.heroku.com/articles/clock-processes-python herokuで適当なアプリケーションを作成していて、remoteへpushできるま…

DjangoでGoogleアカウントの認証機能を入れる方法

Djangoのログイン機能でGoogleのアカウントを使った方法を入れます。 必要なライブラリをインストールします。 pip install django python3-openid social-auth-app-django (ついでにherokuで必要なライブラリも入れたい場合は↓をどうぞ) pip install djan…