PythonManiaスマートフォン用の表示で見るPythonMania普段はロボットとAIを組み合わせて色々作ってます。Python関係以外も色々投稿していくと思います。使えば簡単にフォームを実装できるんですが、何も弄らない状態だととてもシンプルなデザインになってしまいます。CSSやBootstrapを使ってデザインを変更することもできますが、今回は「Dropify」を使ってドラッグアンドドロップでファイルをアップロードできるフォームを作成してみたいと思います。Dropifyjeremyfagis.github.io使い方は簡単で、テンプレートでDropify関連のjsやcssを読み込むだけで実装できます。$('.dropify').dropify();})</script>あとはgithubのページから「dist/fonts」フォルダをダウンロードしてきてテンプレートで読み込めば完了です。github.com使用するときはinputタグを以下の様に変更します。class="btn">Send</button>これでカスタマイズされたフォームが表示されると思います。ちなみに今回の実装ではDjangoのフォームは使用していないので、python側でPOSTリクエストを受け取る場合はviews.pyを以下の様に記述します。※今回使用しているmodels.pyは過去記事と同様なので、そちらをご参照ください。21:11【Djnago】Dropifyを使ってフォームをカッコよくカスタマイズTweetもっと読むコメントを書く2019-07-04【Django】フォームを使ってフォルダごとファイルをアップロードしてみるDjango通常は単一のファイルをアップロードするImageFieldやFileFieldですが、今回はこれらのフォームを使ってフォルダの中身を一括してアップロードしてみたいと思います。※今回の実装は「HTMLInputElement.webkitDirectory」という機能を使用して作られています。以下のサイトに記載の通り、webkitDirectoryは標準機能ではないため環境によってはうまく動作しない場合があります。本番環境等での使用はオススメしません。developer.mozilla.org1models.pymodels.pyは単一ファイルのアップロード機能を作る場合と変わりません。True」を指定しています。3views.pyviews.pyです。FormViewを使用してクラスを定義しています。/」と記載しておきます。フォルダをアップロードすると、フォルダ内のファイルが一括してmediaディレクトリに保存されていると思います。13:53【Django】フォームを使ってフォルダごとファイルをアップロードしてみるTweetもっと読むコメントを書く2019-07-02GitHubにログインできなくなった、、その他GitHubのログイン時に二段階認証を設定していたのですが、メールアドレスを変更した際にGitHubの設定を変更するのを忘れてしまいログインできなくなってしまいました。to~」のエラーが出現。origin/masterで解決しました。Engineにデプロイする流れをまとめましたが、前回の記事では色々と不十分なところがあったので追記します。前回の記事が以下になりますが、基本的には今回の記事を参考にしてもらえれば幸いです。公式HPよりPythonインストーラをダウンロードし、インストールします。追加]をチェックしてください。www.python.org今回はPython3系をインストールしました。インストールが完了したら、コンソールを立ち上げ仮想環境構築用のモジュールをインストールします。virtualenv次に仮想環境を作成します。作成されたら、作成した仮想環境を有効化します。\仮想環境名\Scripts\activateここまででPython環境・仮想環境の構築が完了しました。この作業を行うことで、ほかのプロジェクトに影響を受けずにアプリ開発を行うことができます。SDKをインストールしてきます。クライアントライブラリもインストールしておきます。init上記コマンドを入力すると色々表示されますが、GCPで作成したプロジェクトを選択し、使用するアカウントを選べばOKだと思います。Proxyのダウンロード以下のURLを右クリックして「名前つけてリンク先を保存」します。permissions.みたいなエラーは、3306のポートへ外部からアクセスできないために起こります。使用するポート番号(3306)を開放する必要があります。別のコンソールを開いたらまず仮想環境の有効化を行います。django==2.1※Djnago2.2~ではpymysqlをインストールした際にエラーが発生してしましました。runserverで試しに起動してみます。6init.pyの編集プロジェクトのinit.pyに以下を追記します。#追記7app.yamlの作成manage.pyと同じ階層に「app.yaml」を作成し内容を以下の様に作成します。autoこのファイルはAppEngineの構成ファイルを設定するもので、参照するwsgiファイルやstaticディレクトリなどを記載しておきます。「プロジェクト名」のところはDjangoで作成したプロジェクトの名前に変更しておいてください。今度はGCPのサイト上で操作していきます。APIにアクセスするためのサービスアカウントを作成します。メニューの「APIとサービス」→「認証情報の作成」をクリックします。次に青色の「認証情報を作成」ボタンをクリックし、「サービスアカウントの作成」をクリックします。「新しいサービスアカウント」→Jsonを選択し、作成をするとサービスアカウントキー情報が記載されたJSONファイルがダウンロードできると思います。※なお「役割」を選択するプルダウンが表示された場合には「ストレージ」→「ストレージ管理者」として置いてください。しないと後でDBにアクセスするときにエラーが発生してしまいます。これをmanage.pyと同じディレクトリに保存しておいてください。次に、先ほど作成したCloudSQLの第二世代インスタンスにユーザーとデータベースを作成していきます。メニューから「SQL」を選択します。インスタンスの名前をクリックし、「ユーザー」タブをクリックします。「ユーザーアカウントの作成」から「ユーザー名」・「パスワード」を入力し、新規ユーザーを作成してください。同様にデータべースも作成していきます。「データベース」タブに移行し、「データベースを作成」ボタンから新規データベースを作成してください。9バケットの作成バケットはクラウド上に画像などのファイルを保存しておく場所になります。今回の場合はDjangoアプリのstaticディレクトリ内のファイルややmediaディレクトリなどをここで管理する形となります。メニューから「Storage」を選択して、画面上部の「バケットを作成」から新規バケットを作成します。ここでも役割を選択するプルダウンが表示された場合にはStorage管理者としておいてください。10setting.pyの編集setting.pyを順番に編集していきます。}データベースの設定記載部分は、上段にクラウドSQLの情報、下段にローカルのデータベースの情報を記載しておきます。その他バケットやサービスアカウントの設定などを記載していきます。'プロジェクトID'これでsetting.pyの変更は完了です。無事に起動ができたら、以下のコマンドでGAEへデプロイすることができます。requirements.txt※requirements.txtを作成したら、追加で「gunicorn==19.9.0」を記載しておきます。Engine上にDjangoで作成したアプリをデプロイするところまでをやってみたいと思います。Service)」に分類されます。使用できる言語も増えてきており、Pythonも対応しています。公式ページcloud.google.com今回はDjangoでアプリまで作成し、GAE上にデプロイするところまでやってみます。Platformのアカウント登録・新規プロジェクトの作成は済ませているものとします。公式HPよりPythonインストーラをダウンロードし、インストールします。追加]をチェックしてください。www.python.org今回はPython3系をインストールしました。インストールが完了したら、コンソールを立ち上げ仮想環境構築用のモジュールをインストールします。virtualenv次に仮想環境を作成します。作成されたら、作成した仮想環境を有効化します。\仮想環境名\Scripts\activateここまででPython環境・仮想環境の構築が完了しました。この作業を行うことで、ほかのプロジェクトに影響を受けずにアプリ開発を行うことができます。SDKをインストールしてきます。クライアントライブラリもインストールしておきます。Proxyのダウンロード以下のURLを右クリックして「名前つけてリンク先を保存」します。別のコンソールを開いたらまず仮想環境の有効化を行います。runserverで試しに起動してみます。無事に起動ができたら、以下のコマンドでGAEへデプロイすることができます。EngineにDjangoアプリをデプロイしてみるTweetもっと読むコメントを書く2019-05-23【Django】DjangoでMySQLを使ってみるDjangoDjangoには標準でSQLliteというデータベースが搭載されていて、migrateすればすぐに使うことができます。Database」といったものを使用するケースが多いと思います。今回はMySQLをインストールし、Djangoのデータベースとして設定するところまでやってみたいと思います。64bitAnaconda3Django2.1python3.71MySQLのダウンロード・インストール公式サイトからMySQL(Windows用)のインストーラをダウンロードしてきます。公式サイトdev.mysql.comダウンロードしてきたらインストーラを起動し、画面の表示に従って進めていきます。基本的にNext・Executeで進めていけばOKですがいくつか注意点があるので記載しておきます。僕の場合、上記エラーが出て「Pythonがインストールされてないから公式サイトからダウンロードしてきてね」みたいな警告が出てきました。Serverの初期設定インストールが完了すると、そのままサーバーの初期設定画面に進みます。Typeなんかを選べるようになると思いますが、今回は練習用(開発用)のためそのまま(Development~)のまま次に進みます。ポート番号の設定画面が表示されますが、デフォルトの「3306」がほかのアプリケーションで使用済の場合は変更してください。次にアカウントの設定画面に進みます。Roles画面が表示されるので、rootアカウントのパスワードを設定します。User」ボタンから詳細を設定していきます。ここでは「Username」・「password」を入力してください。あとはNextボタンで最後まで進んでいけば完了です!2パスの設定インストールが完了したら、MySQLServerまでのパスを環境変数に設定します。8.0\bin"」となりました。3データベースの作成DjangoでSQLliteを使用する際には特に意識しなかった作業ですが、MySQLを使う場合にはデータベースを事前にMySQLで作成した後にDjangoで読み込む必要があります。Prompt)を開き、以下の様に進めます。testdb;今回は"testdb"という名前のデータベースを作成します。set」と表示されると思います。これで無事にデータベースを作成することができました。次に作成したデータベースをDjangoのプロジェクトに設定していきます。4MySQLとDjangoの連携まず最初にDjangoのバージョンの確認です。今まではDjango2.2を使用してきましたが、Dango2.2でMySQLと接続しようとすると以下のようなエラーが発生します。0.9.3.解決策としてDjangoのバージョンを2.2→2.1に変更する必要があります。}}「データベース名」・「ユーザー名」・「パスワード」はご自身の設定に合わせて変更してください。僕の場合はデータベース名:testdbユーザー名:rootとなります。これでDjangoとMySQLを連携させることができました。migrateしてテーブルを確認してみると、Djangoで作成されたテーブルが表示されると思います。12:15【Django】DjangoでMySQLを使ってみるTweetもっと読むコメントを書く2019-05-15【Django】ModelFormを使ってフォーム処理をシンプルにするDjangoDjangoでフォームとデータベースを使用するとき、今まではmodels.pyとforms.pyに同じようなコードを書いて処理していました。'/myapp')のように、フォームから送信された情報を一つ一つ変数に格納し、そこからモデル(Friendクラス)のインスタンスを作成してレコードに追加していました。これをDjangoのModelFormを使ってもっと簡潔に処理をしてみたいと思います。ModelFormを使えばModelで定義したクラスをforms.pyのクラスで継承することができます。Models.pyでテーブルとレコードを作成した後に、forms.pyを以下のように変更します。['name','mail','age']今回はFriendFormというModelFormを継承したクラスを作成し、その中でmodels.pyのテーブル(Friendクラス)とレコードを読み込んでいます。このように書くことでmodels.pyとforms.py両方に同じようなコードを書く必要がなくなります。ModelFormを活用することでviews.pyの記述もシンプルにすることができます。14:57【Django】ModelFormを使ってフォーム処理をシンプルにするTweetもっと読むコメントを書く2019-05-15【Django】管理サイトからデータベースを操作するDjango前回の記事の続きです前回の記事www.pythonmania.work前回の記事ではSQLLiteを使用してデータベースに「Hello」というテーブルを作成しました。フォームから送信した名前を登録できるように実装しましたが、これを管理サイトからも操作できるようにしてみます。管理サイトにログインするためには、まず管理者を登録する必要があります。createsuperuserを実行し、「ユーザー名」・「メールアドレス」・「パスワード」の順に設定します。2Helloテーブルを管理サイトから操作できるようにする管理者を作成したので管理サイトにはログインできるようになりましたが、このままではHelloテーブルを操作することはできません。管理ツールからHelloテーブルを操作できるように設定を変更する必要があります。myapp/admin.pyを以下のように変更します。Helloadmin.site.register(Hello)このように記載することで管理サイトからHelloテーブルを操作できるようになります。実際に管理サイトにアクセスしてテーブルを操作してみましょう3管理サイトにアクセスサーバーを立ち上げ、http://127.0.0.1:8000/adminにアクセスします。ログイン画面が現れるので、1で登録したユーザー名とパスワードを入力してログインします。ログインすると以下のような画面が現れると思います。ログインしたらMYAPPの「Hellos」と書いてあるボタンをクリックすると、Hellosテーブルが表示され、レコードの追加・削除が行えます。※画像では「Friends」と書いてありますが気にしないでください笑また「ユーザー」ボタンからは登録ユーザー・パスワードの変更などを行うことができます。11:56【Django】管理サイトからデータベースを操作するTweetもっと読むコメントを書く2019-05-14【Django】フォームから送信した情報をデータベースに登録してみるDjango前回の記事でDjangoのmodels.pyの使い方について勉強しました。前回の記事www.pythonmania.work今回はforms.pyとmodels.pyを活用して、フォームから送信されたデータをデータベースに登録する、ということをやってみたいと思います。前提としてプロジェクトの作成やURLの設定等の事前準備は済ませているものとして進めていきます。(事前準備は以下記事をご参照ください)www.pythonmania.workまた今回はこちらの記事を参考にさせていただきました。今回はフォームから送信された名前をデータベースに登録し、登録された名前をHTML上に順番に表示してみます。"<{0}>".format(self.your_name)まずクラスを定義し、データベースにHelloという名前でテーブルを作成します。次にカラムの作成ですが、今回はDjangoの「CharField」というフィールドを使用します。これは文字列の型を扱うフィールドで、引数の指定により最大文字数を10文字に制限しています。モデルの定義が終わったらmigrateしておきます。次に名前情報を送信するようのフォームを作成します。コードは以下のようになります。'form-control'3Views.pyの作成Views.pyは以下のようになります。None)の部分でHelloFormクラスのインスタンスを作成します。redirect('index')の部分でformの内容(送信されたデータの形式)が正しければDBに情報を追加する処理を行っています。render関数を使用してテンプレートファイルをレンダリングするのですが、今回は「redirect」関数を使用しています。これは「PRGパターン」という処理を実装するためのものです。通常POST処理(フォームからの情報の送信等)を行った際に、ブラウザをリロードすると再度同じ投稿が行われてしまう、という現象が起こります。これを回避するために、POSTリクエストが正常に処理された場合にはそのままHTMLのレスポンスを返すのではなく、別のURLパターンにリダイレクトする、という処理を行う必要があります。そのためこの後解説するアプリのurls.pyでは複数のURLパターンを設定しています。ちなみにredirectの引数である「index」はurls.pyで「name=」で設定した値になります。d)の部分でレンダリングの設定を行っています。models.Hello.objects.all().order_by('-id')はHelloテーブルのすべてのレコードを取得し、id順に並び変えて"hello_qs"変数に格納しています。name="hello_models"),]今回用意するテンプレートファイルはindex.html一種類ですが、前述の通りPRGパターンでの処理を行うためURLは2種類用意されています。%}これでhttp://127.0.0.1:8000/myapp/modelsにアクセスすると正常に起動すると思います。フォームから送信されたデータはデータベースに保存され、id順にhtmlに表示されていきます。13:55【Django】フォームから送信した情報をデータベースに登録してみるTweetもっと読むコメントを書く2019-05-13【Python】Djangoのmodels.pyについてまとめてみたDjango前回の記事で画像ファイルのアップロードフォームを作成した際にmodels.pyのImageFieldを使用しましたが、どのような仕組みでデータベースと連携しているのか分かりにくかったので簡単にまとめてみます。DjangoはSQLを書かなくてもデータベースを操作できるWebアプリケーションを開発するときには、データをデータベースに格納したり、格納したデータ使ってを様々なことを行ったりします。名前やメールアドレスなんかを登録してログインする際の認証に使ったりしますが、この場合は「名前」や「メールアドレス」といった情報がデータベースに保存され、これを取り出して使用したりしています。このようなデータベースの情報の操作には通常「SQL」という言語が使われ、SQLでデータベースに対する命令を記載して使用します。TABLE_NAME~」みたいな感じ)ですがDjangoで作成したアプリケーションでデータベースとのやり取りを行う場合には、この「SQL」を使用しなくてもPythonでデータベースとのやり取りを行うことができます。このデータベースとのやり取りの基本となるのがmodel.pyになります。実際にmodels.pyに記載した例を見ながら仕組みについて説明していきます。self.titlemodels.pyではmodelsクラスを継承してclassを定義することでデータベースのテーブルを作成することができます。部分でmodelsクラスを継承したTestクラスを作成し、"test"という名前のテーブルを作成しています。部分ですがDjangoに標準で搭載されているfieldの関数を使用して「hoge」という文字列を扱うカラムを作成しています。カラムは名前だけ作成すればいい、というものではなく、効率よくデータベースを運用するためにはデータ型やその他の制限を設定する必要があります。Djangoにはデータ型に応じた様々なフィールドが用意されており、例として以下のようなものがあります。例で挙げたコードでは文字列を扱うTexitFieldを使用してカラムを作成しており、引数に「max_length=100」とすることで最大文字数を100文字に制限しています。このようにmodels.pyにデータベースの定義をした後、すぐにアプリケーションにデータベースが反映されるわけではありません。データベースが変更となったことを記載したマイグレーションファイルを作成します。migrateこれでデータベースの変更がアプリに適用されました。はてなブログPro普段はロボットとAIを組み合わせて色々作ってます。趣味で音楽とか映像も作ってます。お酒と音楽が好きです。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。