コンテンツに進む

django

タグ "django" の 10 件の記事

Django勉強会を開催しました

台風10号の心配がありましたが、当日の午後には晴れの予報に変わったので予定通り開催できました。

https://pyehime.connpass.com/event/326007

pyehimeとしては久々のイベントで(長年放置していてすみません)x.comとehimeitのslackからの告知程度でしたが、非エンジニアの方や学生さんを含め多くの方の参加がありました。

イベントの内容については、当初はそれぞれ課題を持ち込んでもらってもくもく勉強会の形で考えていたのですが、参加者みなさんにそれなりの成果物を持ち帰ってもらうことも必要と思い、日記サイトのお題を用意したところ、全員がお題に取り組んでくれました。

中には仕事でDjangoを使ったことがある方もいて、私自身はDjango経験が浅いので、後半は経験者の方に参加者のサポートやプロジェクターでの解説なども協力してもらいました。

それと、今回の勉強会の一つの目的としてGitHubの活用を含めていたのですが、参加者のPC環境が Windows, Mac, Linux とさまざまで ssh key の設定が必要な場面もあって、git環境を整えるのに若干苦戦しました。このあたりの事前準備がもう少し必要だったと思います。

イベントの最後には皆さんそれぞれ成果物の発表や技術的アドバイス、プログラミングのコミュニティの紹介などがありました。

参加者の皆さんからご好評をいただくことができたので、次回開催を検討したいと思います。それと、会場ご提供のサイボウズさんにあらためて感謝いたします。

8月のDjango勉強会に向けて準備

8月末にDjangoの勉強会を開催予定です。

https://pyehime.connpass.com/event/326007

PyEhimeとしてはx年ぶりのイベントです。(長らく放置していてすみません)

ということで、当日の参考になりそうなリンクをこの記事にまとめておきます。

まずはこちら。

はじめての Django アプリ作成、その 1 - Djangoプロジェクト

セクション「はじめての Django アプリ作成、その 1 - Djangoプロジェクト」

https://docs.djangoproject.com/ja/5.0/intro/tutorial01

丁寧な説明、コマンドの使い方、Tipsなどとても充実した内容のチュートリアルです。

次はこちら。

Django チュートリアル: 地域図書館ウェブサイト - mdn web docs

セクション「Django チュートリアル: 地域図書館ウェブサイト - mdn web docs」

https://developer.mozilla.org/ja/docs/Learn/Server-side/Django/Tutorial_local_library_website

セッション、ユーザー認証、テスト、デプロイを含め実用的でとても濃い内容のチュートリアルです。(Part 3以降は英語)

https://docs.render.com/deploy-django

Renderへのデプロイ方法(英語)です。

この記事ついては、私の方で試してみたのでこちらも参考にしてください。

https://wp.netplan.co.jp/archives/4146

DjangoをRenderにdeployしてみる

RealPythonにあるDjangoの記事 - RealPython

セクション「RealPythonにあるDjangoの記事 - RealPython」

https://realpython.com/search?q=django

英語のみ。いくつか無料で公開されている記事があるみたいなので、その中からピックアップして勉強会当日にご紹介したいと思います。

https://getbootstrap.jp/docs/5.3/examples

スタイリングをBootstrapでまるっと対応したい場合など。

https://kimihito.hatenablog.com/entry/2024/08/20/150544

https://spookylukey.github.io/django-views-the-right-way

DjangoをRenderにdeployしてみる - deploy編(2/2)

前の記事からの続きです。

https://wp.netplan.co.jp/archives/4146

settings.py

DEBUG = 'RENDER' not in os.environ
SECRET_KEY = os.environ.get('SECRET_KEY')
ALLOWED_HOSTS = os.environ.get('ALLOWED_HOSTS')
RENDER_EXTERNAL_HOSTNAME = os.environ.get('RENDER_EXTERNAL_HOSTNAME')
if RENDER_EXTERNAL_HOSTNAME:
ALLOWED_HOSTS.append(RENDER_EXTERNAL_HOSTNAME)

環境変数にRENDERが定義されていたら DEBUG=False にする。

ALLOWED_HOSTSにRENDER_EXTERNAL_HOSTNAMEを追加する。

Render側のデータベース PostgreSQL に合わせてローカル環境に PostgreSQL をインストールします。

https://docs.render.com/deploy-django#adding-postgresql-support

pip install dj-database-url psycopg2-binary
pip freeze > requirements.txt

brewを使って PostgreSQL をインストール(MacOS)

https://qiita.com/sakana_gao/items/999bbb1cad90dc35a8b4

brew install postgresql

PostgreSQLサービスを起動

brew services start postgresql

データベースを作成

CREATE DATABASE postgresdb;
CREATE USER postgres WITH PASSWORD 'postgres';
ALTER ROLE postgres SET client_encoding TO 'utf8';
ALTER ROLE postgres SET default_transaction_isolation TO 'read committed';
ALTER ROLE postgres SET timezone TO 'UTC';
GRANT ALL PRIVILEGES ON DATABASE postgresdb TO postgres;

settings.pyを編集

import dj_database_url
...
'default': dj_database_url.config(
default='postgresql://postgres:postgres@wp.netplan.co.jp:5432/postgresdb',
conn_max_age=600
)

マイグレーション

python manage.py migrate

https://docs.render.com/deploy-django#updating-an-existing-django-project

pip install 'whitenoise[brotli]'
pip freeze > requirements.txt

settings.pyにwhitenoiseを追加

MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
...
]

build.shを作成(下記の内容を貼り付け)

#!/usr/bin/env bash
# Exit on error
set -o errexit
# Modify this line as needed for your package manager (pip, poetry, etc.)
pip install -r requirements.txt
# Convert static asset files
python manage.py collectstatic --no-input
# Apply any outstanding database migrations
python manage.py migrate

build.shの実行を可能にする。

chmod a+x build.sh

gunicorn, uvicornをインストール

pip install gunicorn uvicorn
pip freeze > requirements.txt

ローカルで起動してみる。

python -m gunicorn myrender.asgi:application -k uvicorn.workers.UvicornWorker

https://docs.render.com/deploy-django#deploying-to-render

databases:
- name: postgresdb
plan: free
databaseName: myrender
user: postgres
services:
- type: web
plan: free
name: myrender
runtime: python
buildCommand: "./build.sh"
startCommand: "python -m gunicorn myrender.asgi:application -k uvicorn.workers.UvicornWorker"
envVars:
- key: DATABASE_URL
fromDatabase:
name: postgresdb
property: connectionString
- key: SECRET_KEY
generateValue: true
- key: WEB_CONCURRENCY
value: 4

上記の中で DATABASE_URL, SECRET_KEY はRender側から提供されます。

https://docs.render.com/databases#create-your-database

RenderのdashboardからPostgreSQLデータベースを作成します。

Freeプランを選択

データベースを作成すると Internal Database URL の値で環境変数 DATABASE_URL が自動生成されます。

BlueprintのResourcesで対象のサービスをクリック。

Environmentメニューを開く。

画面下の方の

Linked Environment Groups
Environment groups are collections of environment variables and secret files that you can share across multiple services.

ここで作成したEnv Groupをサービスにリンクする。

GitHubリポジトリに接続します。

blueprintのプロジェクト名を入力して Apply をクリックすると、

*.onrender.com のようなURLで公開されます。

DjangoをRenderにdeployしてみる - 準備編(1/2)

https://docs.render.com/deploy-django#creating-a-new-django-project

上のRenderの記事に沿って進めてみます。

最初に作業用のリポジトリを用意します。

https://github.com/kazweda/myrender

git clone https://github.com/kazweda/myrender

作業手順を随時issue化して commit, push しておけば、中断しても後で再開しやすくなります。

python環境を作成

python3 -m venv venv
source venv/bin/activate

Djangoをインストールしてプロジェクトを作成

pip install Django==5.0.7
pip freeze > requirements.txt
django-admin startproject myrender .

起動してみます。

python manage.py runserver
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

migrationを実行

python manage.py makemigrations
python manage.py migrate

あらためて起動してみます。

python manage.py runserver

ブラウザで確認

http://127.0.0.1:8000/

ランディングページを作成

python manage.py startapp homepage

このあたりでGitHubにコミットしておきます。

git add .
git commit -m "first commit."
git push

settings.pyにHomepageConfigを追加

INSTALLED_APPS = [
'homepage.apps.HomepageConfig',
'django.contrib.admin',
...
]

テンプレートを作成

homepage/templates/homepage/index.html

元の記事を参照してください)

(省略)

homepage/view.pyを編集

def index(request):
return render(request, 'homepage/index.html', {})

homepage/urls.pyを作成

from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]

プロジェクトのurlsに反映する。

myrender/urls.py

from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('homepage.urls')),
]

Renderのバナーをダウンロードして保存。

homepage/static/homepage/render-banner.webp

index.htmlにバナーを組み込む。

{% load static %}
...
<body>
<header class="container mt-4 mb-4">
<a href="https://render.com">
<img src="{% static "homepage/render-banner.webp" %}" alt="Homepage banner" class="mw-100">
</a>
</header>

動作確認してみます。

環境変数の設定

.env

DEBUG=True
SECRET_KEY=your_secret_key_here
ALLOWED_HOSTS=['localhost', '127.0.0.1']

settings.py

DEBUG = os.environ.get('DEBUG') == 'True'
SECRET_KEY = os.environ.get('SECRET_KEY')
ALLOWED_HOSTS = os.environ.get('ALLOWED_HOSTS')

今回はここまでにします。(続きはこちら

https://wp.netplan.co.jp/archives/4156

Cookiecutter Django のテスト

Cookiecutter Django 最初の設定項目の説明

必要な環境に合わせて適宜変更… 出来上がったプロジェクトフォルダに移動して、

メールアドレスでユーザーを追加する際のactivation

Mailhog

(参考)Quickstart: Compose and Django

セクション「(参考)Quickstart: Compose and Django」

Docker docs - Quickstart: Compose and Django

PyEhimeもくもく勉強会を開催しました

旧サイト記事の移行

イベントページはこちら 今回のみなさんの課題は、 _ Djangoチュートリアル _ 機械学習 - オンライン講座 * 環境構築 - VirtualBox このような感じでした。 私自身は、前回(昨年12月)のもくもく会の際に、

環境構築はそれぞれ勉強なり準備するとして、成果物を簡単に共有できた方が良い。

のような議論があって、そのときにあがった Cloud9 を使ってDjangoチュートリアルを進めました。 事前に Cloud9 でDjangoプロジェクトを作ってある程度進めていたので、 はじめての Django アプリ作成、その 6 はじめての Django アプリ作成、その 7 このあたりを中心に試してみました。 テンプレートのカスタマイズや管理サイトの機能追加など、実際にコードを書いてブラウザで確認することでDjangoの雰囲気がつかめて来た気がします。 さて、次回ですが、まだ具体的な時期とかは決めていませんが、流行の機械学習を一緒に学んでみようと思っています。 06.12追記 もくもく会の後半で少し議論させていただいた教育関係のクラウド導入の件で、まとまった資料が公開されていたので参考まで。↓ 総務省 - 「教育ICTの新しいスタイル クラウド導入ガイドブック2016」の公表

PyEhimeもくもく勉強会

旧サイト記事の移行

前回の開催から少し間が空きましたが、2回目のもくもく勉強会を開催しました。 PyEhime もくもく勉強会 都合により、今回も急遽の開催となってしまいました。十分な告知ができずすみません。 次回は、会場の手配を含めてもう少し余裕を持って準備しようと思いますので、ご理解・ご協力をお願いします。 前回はPyEhimeの初めての自主開催ということもあって、とりあえず集まっての意見交換程度でしたが、今回は少し足並みを揃えて、cloud9でdjangoを動かしてみるというところまではできました。 ちなみに、私は今回の勉強会のために、事前にvagrantでローカルの開発環境を用意して、準備万端のつもりだったのですが、現地で起動してみるとホストOSからアクセスできない状態。あとで調べて、CentOS(vagrant box)のネットワークインターフェースの問題ということがわかりました。この辺りも、まだまだ経験不足です。 それと、当日、私が風邪気味で頭がぼんやりしていてあまり手を動かすことができませんでした。いろいろ失礼しました。 さて、このような感じで、cloud9というクラウド上の開発環境を一つのノウハウとして共有することができましたので、このあたりをベースにして勉強会を継続できればと思っています。 ただし、具体的な目的や目標がないと、どうしても時間を無駄にしてしまいますので、何か一冊、本を選ぶなどして効率よく学ぶことも考えてみます。 まだまだぎこちないですが、まったりとやっていますので、pythonプログラミングにご興味のある方はお気軽にご参加ください。 適宜、ハッシュタグ #pyehime でおしらせします。 それとPyCon JP参加者交流用のSlackがあります。そちらのehimeチャネルで日常のやり取りをしていますので、よかったらどうぞ。

Django on vagrant の環境構築の補足 - Python3

旧サイト記事の移行

pyvenv の pip を更新(9.0.1)して、 $ pip list とすると、

DEPRECATION: The default format will switch to columns in the future. You can use —format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.

という警告が表示されたので、 https://pip.pypa.io/en/stable/user_guide/#configuration こちらを参考に、 (pyvenv)/pip.conf を作成。

[list]
format=columns

次に、開発用の簡易Webサーバを起動して、ブラウザで開くと、

DisallowedHost at / …

のような警告が表示されたので、 https://docs.djangoproject.com/en/1.10/topics/settings/ こちらを参考に、 (project)/settings.pyを編集して、

ALLOWED_HOSTS = [ '192.168.33.xx' ]

を追加。 追記(2016/12/12) モデル定義を編集してmigrateしたところでWARINGSが表示された。

WARNINGS: ?: (mysql.W002) MySQL Strict Mode is not set for database connection ‘default’ HINT: MySQL’s Strict Mode fixes many data integrity problems in MySQL, such as data truncation upon insertion, by escalating warnings into errors. It is strongly recommended you activate it. See: https://docs.djangoproject.com/en/1.10/ref/databases/#mysql-sql-mode

https://docs.djangoproject.com/en/1.10/ref/databases/#mysql-sql-mode http://django-mysql.readthedocs.io/en/latest/checks.html#django-mysql-w001-strict-mode このあたりを読んで、settings.pyのDATABASESにオプションを追加。

'OPTIONS': {
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
},

PyEhimeもくもく勉強会

旧サイト記事の移行

7月末にPython Boot Camp in 愛媛(初心者向けチュートリアル)を開催したあとで、Slackでやり取りをしていまして、その中で各々勉強したい課題が幾つか見えてきましたので、今後の愛媛でのPythonコミュニティの活動をどうしていくかという作戦会議を兼ねてもくもく勉強会を開催しました。 開催に向けて日程調整をしたところ、connpassでイベントを公開したのが開催の2日前という、急遽の開催となってしまいました。 告知期間が短くてすみません。今後の愛媛での開催に向けての準備ということでご理解いいただければ幸いです。 また、急な開催にもかかわらず4名の方にご参加いただきました。お忙しい中ありがとうございます。 会場に利用させていただいたカフェですが、Wi-Fi環境はフリーなものがいろいろ使えます。ただし6人掛けのテーブル席まわりでは電源は取れませんでした。4人掛けのエリアにはいくつかあるそうです。 開催中の様子。 [caption id=“attachment_2761” align=“aligncenter” width=“300”]PyEhimeもくもく勉強会](</images/wp/2016/09/IMG*20160909_195933s.jpg>) PyEhimeもくもく勉強会[/caption] さて、開催の中身ですが、

  • vagrant + python3 + django _ python programming on Android _ urllib + BeautiflSoupによるスクレイピング _ eclipseのDjango開発環境 _ cloud9でDjango _ 次回は11月中旬以降? _ それぞれ興味のあるライブラリを試してみて教えあう _ もう少しDjangoを使って参加者のレベルを近づける * などなど… のような感じでした。 あと、Google Driveでのファイル共有、appear.inでの画面共有なども行いました。 始めたばかりで右往左往の状態ですが、無理のない範囲で継続していきたいと思います。 Pythonプログラミングにご興味のある方がいらっしゃいましたらお気軽にご参加ください。