Share
Embed
実践して身に付けるPython#3
2023.8.21に開催したイベントで使用した資料です。
youtubeにアーカイブも残っておりますので補完用としてご利用ください~
https://www.youtube.com/live/tiBPBvRkgxA?feature=share
EngineerCafe
August 21, 2023
Transcript
43 slides
-
前回のおさらい ・pythonでwebアプリケーションを作るフレームワークとして「 Django」が最大手という話 ・Anacondaで仮想環境を作り、その中に DjangoとSpyderを導入し、開発する手法 ・画像投稿アプリを作ろう! ・Djangoが持つMTVという考え方の話(モデル、テンプレート、ビュー ) ・WebアプリはWeb上で扱うもののため、 htmlのテンプレートが必須
・テンプレートを4つ作ったよ(コピーと新規で) ・htmlの中には{% (タグ名) (引数) %}という、Django特有のテンプレートタグを仕込むよ!という話 ・テンプレートタグを使って htmlソースを改造していくよ!というところまで テンプレートは→の画像の赤で囲んだ分を作成したよ! というところまでが前回の話でした。 今回は、このテンプレートの中身を編集するところから 始まります。 -
それでは中身を編集していきます。 まずはベーステンプレートから。 ファイルペインで「base.html」をダブルクリックして開き、 {% load static %} この一文を、<!doctype html>の前(つまり改行して1行目)に挿入します。 ついでに、HTMLでコメントも書いておきます。
HTML内でのコメントの書き方は <!-- ~~~~~~~~ -->という書き方をします。 ( がコメント部分) 最初のlord staticがなんのためにあるのかをコメントとして残しておくとよいでしょう。 以下のように整えます。 <!-- 静的ファイルのURLを生成するstaticタグを読み込む --> {% load static %} <!doctype html> <head>~~~(以下略) -
<title>Album example · Bootstrap v5.3</title> <title>{% block title %}{% endblock
%}</title> こうしておくことで、開くページによってタイトル部分を Django側で自動で変えることができるようになり、ページご との編集が必要なくなります。 この部分 -
次のように記述してください。 <!-- Bootstrap core CSS を読み込むコード --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"
integrity="sha384-4bw+/aepP/YC94hEpVNVgiZdgIC5+VKNBQNGCHeKRQN+PtmoHDEXuppvnDJzQIu9" crossorigin="anonymous"> <!-- Bootstrap JS --> <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-HwwvtgBNo3bZJJLYd8oVXjrBZt8cqVSpeBNS5n7C8IVInixGAoxmnlMuBnhbgrkm" crossorigin="anonymous"></script> 長くて見辛いですね!? もう少し簡単な方法を取りましょう!! -
まず最初の <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity= "sha384-4bw+/aepP/YC94hEpVNVgiZdgIC5+VKNBQNGCHeKRQN+PtmoHDEXuppvnDJzQIu9" crossorigin="anonymous"> この部分ですが、これは Bootstrapで公開しているCSSをWeb上で読み込んで使う部分です。
そこに、CDN(Contents Delivery Network)を参照するための属性を付けています。 CDNとは、各地に配置した多くのキャッシュサーバーに Webサイトのコンテンツを一次的に保存 (キャッシュ)し、リクエ ストしたユーザーから近い場所にあるキャッシュサーバーからコンテンツを配信することで、 Webサーバーやネット ワークの状態、あるいはユーザーがアクセスする場所との物理的な距離にかかわらず、安定したコンテンツ配信を実 現するためのものです。 付ける属性はcrossorigin属性とintegrity属性です。 crossorigin 属性は、要素が取得するデータに関する CORS リクエストを構成することができるものです。 integrity属性は、サブリソース完全性 (SRI)という、取得したリソースが意図せず改ざんされていないかをブラウザーが 検証するセキュリティ機能です。 SRI を利用する際には、取得したリソースのハッシュ値と一致すべきハッシュ値を指定します。 -
次は、 <header>内の<h4>、<p>の部分のテキストを書き換えます。 <h4>お気に入りを見つけよう!</h4> <p class=”text-body-secondary”> 誰でも参加できる画像投稿サイトです。 自分で撮影した写真、作成した画像なら 何でもオッケー!でも、AI生成画像や カテゴリに属さない写真・画像はNGです。 コメントも付けてください!</p>
適宜改行してコード上だけでも見やす くしてみましょう。 (実際には改行タグを入れていないの でドバっと表示されます ) 会員制の写真投稿サイトであること、 肖像権や著作権に注意することなどに 触れながら誰でも参加しやすいような 文言で アピールしましょう。 -
今のは、ナビゲーションメニュー (上部のにゅっと出てくるメニュー )の左側に表示される Webアプリの説明文に使う部分でした。 次は、その右部分、 ・Follow on Twitter ・Like on
Facebook ・Email me(ここはそのまま) と書いてある部分を差し替えます。 -
次は、ナビゲーションメニュー左部分にあるトップページへのリンクを書き換えます。 (カメラアイコン) リンク先は a href=”{% url ‘imagepost:index’ %}” コメントをその文章の前に <!--
トップページへのリンク -->と付けておきます。 整えるとこんな感じです。※シングルクォーテーションであることに注意。 ついでに、下に続くコードも見やすく体裁を整えておくとよいでしょう。 -
<!-- ベーステンプレートを適用する --> {% extends “base.html” %} <!-- ヘッダー情報のページタイトルを設定する -->
{% block title %}Image Post{% endblock %} {% block contents %} <!-- タイトルテンプレートの組み込み --> {% include “image_title.html” %} <!-- 投稿一覧テンプレートの組み込み --> {% include “image_list.html” %} {% endblock %} -
作成したファイルに以下を書き込んでいきます。 (一旦中身は全て削除します ) from django.urls import path from . import
views # URLパターンを逆引きできるように名前を付ける app_name = “imagepost” # URLパターンを登録するための変数 # imagepostアプリへのアクセスはviewsモジュールのIndexViewにリダイレクトする urlpatterns = [ path(“”, views.IndexView.as_view(), name=”index”), ]