Django内でファイル管理をする事も可能ですが、ファイルが多くなる事が想定される場合は外部のストレージと連携して管理した方が良い・・・という事で、AWSのS3 bucketを利用して、画像などその他ファイルを管理できるように連携を行ってみました。 前提情報 ・AWS CLIは設定済み・AWS IAMでユーザー作成済み、アクセスキーも作成済み※AWS CLIとIAMユーザー・アクセスキーの作成は前回の記事を参考にどうぞ・WindowsのOSで、Powershellを利用しています インストールするモジュール django-storagesは、djangoを外部ストレージに連携できるようにする為に必要なモジュールです。boto3は、AWSとの連携に必要なモジュールです。django-environは、Djangoプロジェクトのsettings.pyに機密情報を直接記載せず、envファイルから値を読み込めるようにするモジュールです。※これらモジュールをインストールした後は、アプリケーションデプロイの時に必要なrequirements.txtを更新しておきましょう Djangoのsettings.pyにenvironを組み込む manage.pyがあるフォルダ層に.envファイルを作成。.envファイルの中に、機密情報を記入します。 settings.pyの中には以下のようにenvironの設定と、値の読み込み、importを記述する必要があります。 コマンドラインでAWSのS3 bucketにファイルを連携させる AWSのS3 bucket画面で、ファイルが連携されているか確認 コンソールで確認すると、バケットの中にオブジェクト(ファイル)が無事に連携されている事が確認できました
今回AWS CLIを使って、AWSサービスにローカルPCからログイン&操作できるように環境を整えます。 AWSのIAMでユーザーを作成 ローカルPCからAWSリソースに接続をする場合、アクセスに利用するユーザー情報を作成する必要があります。 ユーザー名を決めて、「AWSマネジメントコンソールへユーザーアクセスを提供する」にチェックを入れます。私の場合はパスワードを自動生成ではなく自分で決めて、サインイン時にパスワードの作り直しは不要と設定しました。 一般的にはユーザーを含めるグループを作成し、そのグループに対してポリシーを設定しますが今回はユーザー単体に対してポリシーをアタッチしてみました。ポリシーは検索でも色々と調べられますので、アカウントに対して許可したい権限を付与してあげてください。 ユーザー作成完了後、アクセスキーを作成すればこの情報を使ってAWS CLIからAWSリソースにアクセスする事ができるようになります。 AWS CLIのインストール こちらのURL(公式サイト)に記載されている通りに、WindowsであればPowerShellにコマンドを打ってインストールを行う。Installing or updating to the latest version[…]
皆さんごきげんよう、Githubを利用していると、pushした際にまれにファイル名が勝手に大文字に変換されてしまいます。対応方法について残しておきます、少しでも参考になりますと幸いです。 原因 Gitのcore.ignorecaseをオフにする Gitはデフォルトで core.ignorecase = true になっていて、大文字小文字の違いを無視します。これを無効化するコマンドはこちら。 CLIを使った対応方法 Powershellでファイル名を修正して、コミットとプッシュ。
皆様ごきげんよう。Djangoでログイン機能を実装した後、ログイン後に表示させたいページをログインしていないユーザーが表示できないようにするにはどうすればよいかについてメモを残しておきます。少しでも参考になりますと幸いです。 importの必要なモジュール(記入場所はviews.py) 判定情報を記入する場所(views.py) もしログインしていない場合の判定と処理を定義する方法(settings.py) これにより、ログインされていない状態であれば必ずLOGIN_URLに設定されているURLにリダイレクトされるようになります。
皆様ごきげんよう、今回は特定のファイル形式のアップロードを許可する実装方法について書き残しておきます。少しでも参考になりますと幸いです。 前提情報 models.pyのサンプル まずは日記に、画像を付けられるようにclass Diaryの中でvalidators機能を利用します。 forms.pyのサンプル views.pyのサンプル if form.is_valid()の部分で、models.pyで指定したFileExtentionValidatorが実行されます HTMLのサンプル 必ずenctypeを指定する事 これで違うフォーマットのファイルをアップロードして投稿しようとすると、エラーが表示されるようになりました。
皆様ごきげんよう、今回はデーターベースで設定している値の名前を日本語に表示させる方法について書き残しておきます。少しでも参考になりますと幸いです。 前提情報 ラベルの設定方法(サンプル) models.pyで記載しているclassの中に、以下のような形式でラベルを設定する事が可能です。 ※class Mediaの方にverbose_nameを設定してあげないと、以下のようなエラーがでます。TypeError: FileField.init() got multiple values for argument ‘verbose_name’
皆様ごきげんよう、本日はDjangoで利用しているMysqlに登録されているデータをHtml上で参照するにはどうすればよいかについてナレッジを残しておきます。少しでも参考になりますと幸いです。 前提情報 ー Mysqlを利用しています。ー 既にデータが登録できるようにモデルの設定(models.py側)ができている。 データの取得に関わるファイル (1)views.pyファイルではデータベースから辞書型のオブジェクトで値を引っ張ってくる記述をする。(2)urls.pyで、データを利用するファイルとviews.pyで設定した関数を紐づける。(3)HTML上で{{辞書のキー}}を宣言する事により、データベースから取得したデータを取り扱えるようになる。 views.pyの記載方法(サンプル) たとえば、ArticlesとLanguageのclassをmodels.pyで宣言している場合。ArticlesViewの中で、複数のデータ取得を行う為の設定を行えます。 urls.pyの記載方法(サンプル) HTMLでデータ表示する為の記載方法(サンプル) HTMLの中に、{% %}や{{ }}を利用してviews.pyで取得したデータを表示させる事ができます。views.py側で取得したデータは辞書型なので、for loopを利用して中身を表示するようにhtml側で記述します。もしデータが無かった時の為に{% empty %}と書き、その後には代わりに表示する文章を入れます。そして最後にfor loopを閉じる{% endfor %}を記述してあげればOKです。 このようにして複数のモデル情報を1つのViewを通して取り扱う事ができるようになりました。
皆様ごきげんよう。Djangoのmodels.pyの中で複数モデルを取り扱うのに苦戦した為、解決方法をこちらに載せておきます。少しでも参考になりますと幸いです。 models.pyの中に記載する内容 models.pyではデータベースで取り扱いたい項目を各classごとに記載します。そしてdjangoの管理画面にログインすると、アプリ名配下にはmodels.pyで宣言したclassの内容が表示されます。その中で1つ別のclassに、その他classで宣言した内容を含める事も可能です。わかりやすい例としては、ブログ登録フォーム内にタイトル、カテゴリー、フォーム、タグが含まれているイメージ。 (例)django管理画面に表示されるデーター タイトル ※単体のタイトルデータ用モデルー カテゴリー ※単体のカテゴリー用モデルー フォーム ※単体のフォーム用モデルー タグ ※単体のタグ用モデルー ブログ投稿フォーム ※このテーブル内には、タイトル・カテゴリー・フォーム・タグ情報すべてを含めています。 1つのclassに、別に宣言した複数のclass内容をまとめる方法 そして以下は、複数のclass内容を1つの別class内に記載するサンプルです。 データベースに反映させる models.pyで追加したデータ情報はちゃんとデータベース側にも反映させる必要があります。 管理画面に行くと、このように複数の項目をまとめる事が可能になりました。
皆様ごきげんよう。構築中のサービスをAWSとHerokuのどちらでデプロイするか悩みましたが、一旦規模が小さいサービスを展開する為、インフラ管理が楽なHerokuを選択してみました。デプロイする為の初期設定と、デプロイ時にエンカウントした問題がいくつかあったのでナレッジを残しておきます。少しでも参考になりましたら幸いです。 前提情報 ー コードはGithubで管理しています。ー Powershellを使用。ー Herokuコマンドも利用できるように、Heroku CLIをインストール済。 CollectStatic問題 Staticファイルを一か所にまとめるプロセスがHeroku側で走るのですが、一か所にまとめられないとエラーがでる場合があります。この場合は対応方法を検討する必要がありますが、一旦この処理自体を実行しないように設定する事も可能です。その際はコマンドプロンプト経由で以下コマンドを実行。 ※設定を戻す際には1を0に設定すればOK Tkinterモジュールが見つからない問題 そもそもTkinterモジュールを自分の意志で設定していなかったのですが、プロジェクト全体のmodule.pyファイルを確認した所、一番最初の行にDjango側の初期設定の関係で記載されている事が確認できました。TkinterモジュールはPythonでGUIを取り扱うのに必要なモジュールで、Herokuでは取り扱っていないモジュールでした。今回のプロジェクトではGUIを利用していないので、この行はコメントアウトしておきました。※結構ネットではまっている方が多いのでHeroku側で対応できるようにした方が良いかもです ローカルのMysqlに設定されているSocketで接続できません問題 ローカルPCで動作確認をする際には問題なく動作しましたが、デプロイする際にそもそもMysqlをHeroku側で準備しておかないとエラーが出てしまいます。その為、アプリケーション側とHeroku側で事前にDBの対応が必要です。 まずはHeroku側で、JawsDB MysqlをAdd-Onsマーケット経由でインストールします。2025年8月時点では無料プランがあったので、そちらを利用してみました。 Powershellで、コマンド「 heroku config」と実行するとDBのURLも含まれた情報が取得できるのでそこで接続URLを確認します。接続URLはDjango側でDB設定しているところのURLの値として記入(プロジェクト全体の設定が記載されているsettings.py、もしくは.envファイル)。 ちゃんとJawsDB側で、ユーザー設定を行っておきましょう。[…]
皆様ごきげんよう、本日はDjangoでデフォルト設定されているデータベース(Sqlite3)以外のデータベースを利用したい場合の設定方法について手順を残しておきます。少しでも参考になりましたら幸いです。 Mysqlを利用する場合の手順 まずは利用しているPCに対してMysqlを公式サイトからダウンロードして、インストールして下さい。mysqlにログインする時の管理者ユーザーをインストール時に設定する事になります。MySQL :: Developer Zone デフォルトでは、プロジェクト全体の設定を管理しているsettings.pyの中にSqlite3の設定が記載されております。この部分をMysql用に修正すればOK。 変更前のコード 変更後のコードsettings.py内の冒頭あたりに「import dj_database_url」を記載してください。そして別途PowerShell(コマンドプロンプト)で「pip install dj_database_url」を実行。 管理者ユーザーでログインをしてみる PowerShellで新しくタブを開き、以下コマンドをうってログインできるか確認する。以前のMysqlで利用できたmysql -u rootは現在セキュリティ強化の為、設定を変更しない限り利用できない模様。 このコマンドの後にパスワードが要求されるので、問題なければmysqlにログインが可能です。[…]