Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Djangoで動的サイトを作ろう
Search
antenna_three
July 02, 2021
Programming
1.2k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Djangoで動的サイトを作ろう
Presentation at UTMC (
http://komaba.utmc.or.jp/
).
antenna_three
July 02, 2021
More Decks by antenna_three
See All by antenna_three
GitHub Actionsで学ぶCI/CD
antenna_three
0
56
ビットボード解説
antenna_three
1
4k
シェーダで学ぶ画像フィルタ
antenna_three
0
2.1k
レイマーチング入門
antenna_three
0
2.2k
PythonによるWebスクレイピング入門
antenna_three
0
1.8k
ゲーム制作概論
antenna_three
0
2k
Other Decks in Programming
See All in Programming
関東Kaggler会_NVIDIA_Nemotron_コンペ_振り返り
rick_ds
0
490
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
870
freee が目指す データ マネジメント戦略 AI-Ready 時代を支える 攻めのガバナンスとは
freee
PRO
0
300
作るコストが小さくなった時代 幸せに働くために改めて考えたいこと 〜エンジニアとして価値を出し続けるために注視している二分野〜
yuppeeng
0
190
仕様駆動開発へのトライを機に チームに適合する手法を模索し続けている話
freee
PRO
0
450
Go 1.27 における memory allocation の高速化
andpad
0
110
Foundation Models frameworkで画像分析
ryodeveloper
1
600
React本体のコードリーディング
high_g_engineer
1
140
その節約、円になってますか?
isamumumu
1
710
「寝てても仕事が進む」Claude Codeで組む第二の脳
tomoyafujita2016
0
310
Welcome to the "Parametricity" 🏙️ − Generic だけど Specific な世界 −
guvalif
PRO
1
200
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
210
Featured
See All Featured
Building an army of robots
kneath
306
46k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
270
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
360
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Marketing to machines
jonoalderson
1
5.7k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
Un-Boring Meetings
codingconduct
0
380
Exploring anti-patterns in Rails
aemeredith
3
460
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Are puppies a ranking factor?
jonoalderson
1
3.8k
Transcript
で動的サイトを作ろう 2021/07/02 '16 uc
もくじ 基本知識 Djangoとは・Webアプリケーション3層構造・MVC Djangoアプリケーションを動かしてみよう 環境構築・開発サーバー起動 動く仕組み プロジェクト構成・Model/View/Template/URL
基本知識
Djangoとは Pythonで動くWebアプリケーションフレームワーク 動的Webページを簡単に作ることができる フルスタックなので欲しい機能は大体初めから付いてきている InstagramやPinterest, MDNに利用されている
静的Webページとは リクエストに対してファイルが返されるだけのWebページ ユーザーによらずレスポンスは同じ サーバー負荷が低い 動的Webページとは リクエストのたびにサーバーでレスポンスが生成されるWebページ ユーザーによって違うレスポンスにできる 情報が頻繁に更新される・データ量が多い場合に向いているとされている
Webサーバーとは HTTPリクエストを受け取ってHTTPレスポンスを返すサーバー Webページの場合のレスポンスはHTMLが基本 静的WebページはWebサーバーだけで動かせる Apache, nginxなどがある
(サーバーサイド) Webアプリケーションとは 動的Webページを実現するためのソフトウェア Webサーバーからリクエストの内容を受け取り、必要に応じてデータベースにアクセ スし、レスポンスを生成する DjangoはWebアプリケーションを作るためのフレームワーク
データベースとは データを蓄積して整理したもの データベースを管理するシステム (DBMS: Database Management System) として MySQL, PostgreSQL,
MariaDBなどがある
余談 | 近年のWeb技術 Jamstack (JavaScript + API + Markup) が注目されている
CSR (Client Side Rendering) JavaScriptを使ってクライアント(ブラウザ)側でWebページを生成 SSR (Server Side Rendering) CSRに近い構成でリクエスト時にサーバー側でHTMLを生成(つまり動的Webサイト) SSG (Static Site Generation) ビルド時に静的Webサイトを生成
MVC (Model, View, Controller) Webアプリケーションなどの設計の考え方 Model データベースの操作、変換などを行う View HTMLなど、表示する部分を制御する Controller
URIやクエリなどを参照して、Modelのする処理や返却するViewを決める
Djangoアプリケーションを 動かしてみよう
今回取り上げる題材 UTMCの合宿の参加登録サイト 現在はWikiを各自で編集する形になっている 要件定義 名前・入学年度・参加開始日・参加終了日を入力して送信すると参加登録される 参加者一覧を見ることができる 進行 1からサイトを作るのが理想だが、時間がかかるので今回は予め作ったサイトを使って 解説する
Python仮想環境の作成 $ mkdir utmc-django & cd utmc-django #←このフォルダ名は何でも可 $ python
-m venv venv 仮想環境の有効化 PowerShell (Windows) の場合: $ venv/scripts/activate.ps1 bash (Mac/Linux) の場合: $ source venv/bin/activate
Djangoのインストール $ python -m pip install Django $ python -m
django --version
サンプルプロジェクトのクローン $ git clone https://github.com/antenna-three/utmc-django-tutorial.git データベースの作成 $ cd utmc-django-tutorial $
python manage.py migrate 開発サーバーの起動 $ python manage.py runserver ブラウザで http://localhost:8000 にアクセスしてみよう
動く仕組み
プロジェクトの構成 合宿 ( gasshuku ) プロジェクトの中に参加登録 ( register ) アプリケーションがある
要望アンケートなどの機能を実装するときはアプリケーションを追加すればよい プロジェクトの設定は gasshuku/settings.py に書かれている . ├─gasshuku ├─register │ └─templates │ └─register └─templates
主要なファイル urls.py URLに対してViewなどを対応付ける views.py Requestを受け取ってViewを返す。名前はviewsだが役割的にはControllerに近い models.py Modelを定義する templates/ HTMLのひな形。MVCモデルでのViewにあたる
Model データベースの構成を決める register では名前、入学年度、参加開始日、参加終了日という4つのフィールドを持 つ Entry というテーブルを定義している register/models.py class Entry(models.Model):
screen_name = models.CharField(max_length=100) admission_year = models.IntegerField() start_date = models.DateField() end_date = models.DateField()
View リクエストからレスポンスを作る テンプレートにデータを渡してHTMLを作ることが多い ( render ) register/views.py def entry(request): admission_years
= list(range(2021, 1975, -1)) entry_dates = [date(2021, 9, day) for day in [10, 11, 12, 13]] context = { 'admission_years': admission_years, 'entry_dates': entry_dates, } return render(request, 'register/entry.html', context)
汎用View オブジェクトのリストや1つのオブジェクトの詳細といったよく使うViewは最初から 用意されている 対象のModelの指定とテンプレートの用意だけすればよしなにModelからデータを取 り出してコンテキストを用意してテンプレートに流し込んでくれる class ListView(generic.ListView): model = Entry
テンプレート 通常のHTMLにviewから受け取った変数 {{ }} や制御文 {% %} を混ぜて書く register/templates/register/entry_list.html <table>
{% for entry in entry_list %} <tr> <td>{{ entry.screen_name }}</td> <td>{{ entry.admission_year }}</td> <td>{{ entry.start_date }}</td> <td>{{ entry.end_date }}</td> </tr> {% endfor %} <table>
URL URLとViewを対応付ける name はDjangoアプリケーション内での名前、 app_name は名前空間 register/urls.py app_name = 'register'
urlpatterns = [ path('', views.index, name='index'), path('list/', views.ListView.as_view(), name='list'), path('entry/', views.entry, name='entry'), path('submit/', views.submit, name='submit'), path('details/<int:pk>', views.DetailView.as_view(), name='details'), path('results/<int:pk>', views.ResultView.as_view(), name='results'), ]
Admin機能 管理ユーザーの作成 $ python manage.py createsuperuser http://localhost:8000/admin にアクセスしてみよう Admin画面にEntryの内容が表示されるのは register/admin.py
で登録しているから
デプロイ UTMCのサーバー, Heroku, PythonAnywhereなどで無料でホスティング可能
足りない機能を実装してみよう 入力内容のバリデーション(名前が空欄、参加開始日>参加終了日などを弾く) 日程のモデル化(開始日、終了日、宿泊先など) 日ごとの参加者一覧( get_queryset ) ユーザー認証(共通アカウントでログイン) アンケート、企画募集などのアプリケーション 注意 Modelを変更したらマイグレーション
( python manage.py migrate ) を忘れずにすること
See also Django ドキュメント Django | MDN Django Girls