diadia

興味があることをやってみる。自分のメモを残しておきます。

Django

DjangoをDockerのドキュメントを見て環境構築

Docker自体はqiitaの記事を見て環境構築したことがあるが、ドキュメントが存在し、それ通りにやったら案外かんたんにできてしまったのでメモ。 引っかかったところはsettings.pyのデータベースのセッティングだったのでそこを中心にメモしておく。 ドキュメ…

drf エラーハンドリング

リソースに変更を加えるapiを作る際に、以下の要望があった。 apiを叩いたら成功したか失敗したかの結果をTrue, Falseで欲しい。この場合drfでResponseオブジェクトを返せば良い。 return Response({"success":True}) # または return Response({"success":F…

Djangoのpermissionを付与するサンプルコード

基本的なmodelに基づくpermissionは自動的に作成される。ということで、permisson自体は作らず、作成されているpermissonを付与するサンプルコードを書く。 permissionを付与するにはUserに直接付与するケースとGroupに付与し、そのGroupに属するUserが間接…

APIViewのpermission_classesはどんな仕組みで動いているのか

APIViewのプロパティは以下の通り。 # APIViewのプロパティ class APIView(View): # The following policies may be set at either globally, or per-view. renderer_classes = api_settings.DEFAULT_RENDERER_CLASSES parser_classes = api_settings.DEFAUL…

django permissonでリソースを制御する

webアプリの場合、認証する->認可するの流れをたどる。 この認可されたパーミッションにしたがってリソースのアクセス制御を実施したい。 djangoの場合どうすれば実装できるか? 下準備 Userオブジェクトにパーミッションを付加する Groupオブジェクトにパー…

email認証する方法

一つはUserモデルを自分で作成する方法。 もう一つは認証バックエンドにemailで認証するバックエンドを実装して、settings.pyでそれを使う宣言する方法。 後者を最近試してできたので時間があれば詳しく書きたい。 要点だけまとめておく。 1.備え付けのdjang…

djangoログイン時にクッキーにセッションIDをセットする仕組みを見てみたのでメモ

まず認証 認証はユーザーが誰であるかを特定するものである。そのためクレデンシャル情報を用いて認証を行う。 クレデンシャル情報は種類がある。 ユーザーの記憶によるもの(something you know) ユーザーが所有しているもの(something you have) ユーザーの…

authtokenをrestframeworkだけで実装して観察してみる

昔Token認可で実装したことがあるけど、rest-authを使って実装したのでライブラリを使わないで試してみる。 ドキュメント https://www.django-rest-framework.org/api-guide/authentication/#tokenauthentication settings.py まず、Tokenで認可させたい場合…

cookieやlocalStorageを操作するには?

アンドロイドアプリを作る場合はアプリのストレージ領域に暗号化したTokenを保管し、通信を行うときだけそれを引っ張り出してリクエストヘッダにセットして通信を行っていた。クライアントがブラウザの場合にはブラウザに保存するのでどうやって保存して取り…

djangoのキャッシュを使ったセッションの設定

ドキュメント: https://docs.djangoproject.com/ja/3.1/topics/http/sessions/#using-cached-sessions https://docs.djangoproject.com/ja/3.1/topics/cache/#django-s-cache-framework 手順 1 . 概要 今回memcachedにデータを保存するセッション方式の実装…

djangoとvuejsをcdn以外の方法で共存させる

npmにvueを入れて構築する方法を試みる。djangoはdjango rest frameworkを使う。 今回気になる事項は、 どうやってdjangoとvueをcdn以外の方法で共存させる環境を構築するのか どういう仕組でdjangoとvueが連携する仕組みになっているのか vueを使うにあたり…

typescriptメモ

基本の型(Basic Types, Primitive Type) TypeScript: Handbook - Basic Types Boolean Number String Array Tuple Enum Unknown Any Void Null and Undefined Never Object アロー関数の戻り値の型定義について理解していない。 環境構築 書いたtypescriptを…

djangoのcontextをjavascriptに渡す際に困る場合がある件

大した内容ではないので問題点と対処法を軽く書く。 djangoのcontextに格納したデータをjavascriptにわたす方法 最初にviewにてデータをcontextに格納する テンプレートにてjavascriptを走らせ、contextのデータを受け取る def example(self, request, *args…

Djangoのformをより良く見せるために(改訂版)

Djangoにおいてformウィジェットの理解を深めない限り、forms.ModelFormやforms.Formの利用したとて、フォームを使った画面が残念な結果になってしまう。 見た目の良いフォーム画面を作るには htmlファイルを自ら作成して好みのformを作成する ModelFormやFo…

django ページネーションについて(改訂版)

ページネーションについて ページネーションは一覧表示させるオブジェクトを1ページ内にどれだけ分割して表示させるか。それに関わる技術のことのようだ。 関連ドキュメント ページネーション | Django ドキュメント | Django メモ djangoにおけるページネ…

cdnでvuetifyを使うために

軽く要点を残す。 djangoでincludeを使ってコンポーネント化できたのでテンプレートの見通しが良くなった。 cdnを使ってコンポーネント化するとvuecliを入れる前にどんな感じでvuetifyや単一ファイルコンポーネントが使えるか確認できる。(もちろん全く同じ…

nginxで403が返されるときに対応したこと

サーバー上に新しくディレクトリを作成し、そこを起点にgithubからpullを行いデプロイした際にうまく作動しなかった。 環境 centos7 nginx porstgresql django 症状: home画面のhtmlはサーバーから配信される。 home画面の静的ファイルの配信がうまく行って…

fabricでデプロイするために得られた知見

まずfabricでできることはなにか? fabricでできることはshellスクリプトでもできる。シェルスクリプトが書ければfabricをあえて学習する必要ないと思われるが、fabricを使うのはpythonを使うので学習コストが低いし、pythonで書くのでコードの見通しが良く…

django vueを追加する

MPAでvueを使いたい。。。 色んな方法で実現できると分かった。 cdnを使う方法 vue cliを使う方法 vue cliを使わないで行う方法 最終的にはvue cliを使って構築するのがわかりやすいと感じた。cdnはもちろんかんたんだけれどもvuetifyを組み合わせて使う方法…

constants.pyを設けるメリット

djangoでconstants.pyを設けるメリット views.pyやurls.pyまたテストにおいてハードコーディングが少なくなる。 urls.pyにおいてviewネームを変更するとviews.pyの該当するreversやreverse_lazyのハードコーディング部分を探して変更する必要が出てくる。 し…

Django Test retrofitが送信するデータを再現する

内容 djangoの単体テストを実装する際にAndroid端末が送信するデータ形式を再現できなければ、単体テストの効果が得られない。 したがって最初にretrofitのpostメソッドの形式を確認し、それをそれぞれどのようにdjango(python)で再現すればよいかをメモして…

Seleniumを使ったテストのメモ

実装の際に困ったこと django.test.LiveServerTestCaseを使う環境を把握できていなかった。 ヘッドレスモードを使う場合にはオプションに--window-sizeをつけなければならないこと。 前提 ChromeDriverを使ってseleniumを実行する 準備 seleniumをインストー…

djnago test ModelFormにForeignKeyが含まれる場合のテスト

例えばItemモデルにCategoryというForeignKeyが含まれているとする。 その上ForeignKeyオブジェクトから選択させる方式でItemオブジェクトを生成している。 Itemオブジェクト生成のためにItemModelFormを作成すると以下のような感じになる。 class ItemModel…

DRFとretrofitの関係(Bodyに関して)

話したいこと drfのrequest.dataの内容はfieldかbodyかで違いが出る話をしたい。 django rest frameworkを使ってアンドロイドからデータを受け取る場合にはrequest.dataを使う。そしてこのrequest.dataの内容がretrofitのインターフェースメソッドの記述の仕…

Django シグナル POST_SAVEのupdate_fieldsをどう使うか

シグナルpost_saveのupdate_fieldsの用途 例えばこんな時に使いたい時にupdate_fieldsが役に立つ。 class Profile(models.Model): user = models.ForeignKey(User, on_delete=models.PROTECT, null=True) adm0 = models.CharField(max_length=15, default="J…

Djangoのテストを実装

分かったこと djangoでテストする項目がわかった。 どんな感じでdjangoのテストを書くのか分かった。 djangoのテストはどんな種類か フレームワークの種類によってTestが準備されていることが分かった 分かったことを軽くまとめる ふわっと理解する テストは…

GeoJsonデータをGoogle Mapにレンダリングする

コンテンツ GeoJsonを有効利用したいけど解決策はあるか? インストール 具体的な使用イメージ 色を変える 1. GeoJsonを有効利用したいけど解決策はあるか? GeoDjangoを使う場合にgeometry型のデータをGeoJsonとして出力できる。 以下のように簡単に。。。 fr…

django leaflet の使い方メモ

django leafletはブラウザ上でgeo系のデータをマップに描画するものである。 特徴はjavascriptを一切書かずにOSMをブラウザ上に表示したり、geoデータをマッピングすることができる。 スマホ等にアプリを通じて描画する方法はGoogle Maps Platformを使って実…

geodjango実装メモ(修正版)

コンテンツ PointField等のGeo系特有のFieldを使うには? admin(管理ページ)でGeoデータを編集するためには? geometry型のデータをどのように画面に表示するか? django leafletの使い方 半径10km以内のpointのみを表示するにはどうすれば実現できるか? model…

django ManyToManyFieldを含むオブジェクトの操作

内容 ManyToManyFieldを含むモデルクラスオブジェクトの生成方法は3通りある。 確認した方法を記録しておく。 復習 ManyToManyFieldを含むクラスオブジェクトを生成する 1. 復習 そもそもオブジェクトの生成法は?? 基本的にオブジェクトの生成は、createメ…