Python 会議室予約システム

Djangoフレームワークを使った会議室予約システムの作成(フロント)

会議室予約システムのデザインをする

今回はPythonのWebアプリケーション用フレームワークのDjangoを使った会議室予約システム作成の続きになります。

前回までの内容は以下を参照してください。

Djangoフレームワークを使った会議室予約システムの作成

フロントデザイン修正

フロントのデザインを修正します。

templates/resurv.htmlコーディング

templates/resurv.htmlを修正します。

  1. <!DOCTYPE html>
  2. <html>
  3. <head lang="ja">
  4. <meta charset="utf-8">
  5. <title>会議室予約システム</title>
  6. <!-- google fontsを使用するためgoogleからフォントのcssを取得します。-->
  7. <link href="https://fonts.googleapis.com/css?family=Courgette|Noto+Serif+JP&display=swap" rel="stylesheet">
  8. <!-- css のスタイルを記述します。 今後cssは外部ファイル化を行います。 start -->
  9. <style>
  10. /** CSS はhtmlのtag class id の有効範囲が大きいものから記載します。 */
  11. /** ************************************************** */
  12. /** tag */
  13. /** ************************************************** */
  14. /** h1タグのスタイルです */
  15. h1 {
  16. font-size : 40px; /* h1タイトルのフォントサイズです */
  17. font-family: 'Courgette', cursive; /* googleフォントです */
  18. text-align : center; /* 文字の中央よせです */
  19. }
  20. /** ************************************************** */
  21. /** class */
  22. /** ************************************************** */
  23. /** wrapper のスタイルです */
  24. /** bodyタグでもいいですが wrapperを使うことで全体的にpaddingやmarginの調整をとりやすくします */
  25. .wrapper {
  26. max-width : 1200px; /* 最大横幅です */
  27. min-width : 700px; /* 最小横幅です レスポンシブ対応ではないです */
  28. margin : 0 auto; /* 外側を操作します。 中央よせをします 0が上下 autoが左右 */
  29. padding : 40px; /* 内側を操作します。 上下左右で内側に40pxの余白を付けます */
  30. }
  31. /** reserveのwrapperを使うことでreserveにpaddingやmarginの調整をとりやすくします */
  32. .reserve_wrapper {
  33. padding : 50px; /* 内側を操作します。 上下 50px 左右200px で内側に余白を付けます */
  34. }
  35. /** -------------------------------------------------- */
  36. /** 入力フォーム */
  37. /** -------------------------------------------------- */
  38. /** reserveのinput部分で使用します */
  39. .reserve_input {
  40. border-radius : 12px; /* 枠に丸みを付けます */
  41. box-sizing : border-box;
  42. border : 1px solid #465DAA;
  43. /* 枠線を表示します */
  44. padding : 50px; /* 内側を操作します。 上下左右 50px で内側に余白を付けます */
  45. margin : 50px 200px; /* 外側を操作します。 上下 50px 左右200px で外側に余白を付けます */
  46. }
  47. /** reserveのinput部分で入力の部品を囲みます */
  48. .reserve_input_div {
  49. position : relative; /* reserve_input からみて相対的な位置を設定します。 positionのデフォルトは staticです */
  50. margin : 30px 3%; /* 外側を操作します。 上下 30px 左右3% で外側に余白を付けます */
  51. }
  52. /** input部分で入力の部品の中の実際の部品textを選択します */
  53. .reserve_input_div input[type='text'] {
  54. font : 16px/24px 'Noto Serif JP', serif;
  55. /* font-size/line-height googleフォントです */
  56. box-sizing : border-box; /* ボックスサイズの算出方法を指定します パディングとボーダーを幅と高さに含めています */
  57. width : 100%; /* 横幅を100%にします。*/
  58. letter-spacing : 1px; /* 文字の間隔を指定します。*/
  59. padding-left : 6em; /* 内側を操作します。 左 6em(font-sizeに合わせる) で内側に余白を付けます */
  60. }
  61. /** input部分で入力の部品の中の実際の部品textにfocusが当たったとき */
  62. .reserve_input_div input[type='text']:focus {
  63. outline : none; /* focus(入力ができるようになるとき)が当たったとき 枠を表示しません */
  64. }
  65. /** 部品のclass です 今回はmrrs/form.pyに記載しています */
  66. .reserve_type_text {
  67. padding : 4px 0; /* 内側を操作します。 上下 4px 左右0 で内側に余白を付けます で内側に余白を付けます */
  68. border : 0; /* bordrを表示しない */
  69. border-bottom: 1px solid #1b2538; /* 下線は表示する */
  70. background-color: transparent; /* 背景を透過 */
  71. }
  72. /** reserve_type_text に関連する focus_lineのクラスを指定します */
  73. .reserve_type_text ~ .focus_line {
  74. position : absolute; /* reserve_type_text からみて絶対的な位置を設定します。 positionのデフォルトは staticです */
  75. bottom : 0; /* 下から0 */
  76. left : 0; /* 左から0 */
  77. width : 0; /* 横幅 0 */
  78. height : 2px; /* 高さ 2px */
  79. transition : 0.4s; /* 要素の2つの状態間の変化を0.4秒で操作します */
  80. background-color: #da3c41; /* 下線を赤にします */
  81. }
  82. /** reserve_type_textのforcusに関連する focus_lineのクラスを指定します */
  83. .reserve_type_text:focus ~ .focus_line,
  84. .reserve_input_div.reserve_type_text ~ .focus_line {
  85. width : 100%; /* 横幅 100%にします */
  86. transition : 0.4s; /* 要素の2つの状態間の変化を0.4秒で操作します */
  87. }
  88. /** reserve_type_text に関連する labelを指定します */
  89. .reserve_type_text ~ label {
  90. position : absolute; /* reserve_type_text からみて絶対的な位置を設定します。 positionのデフォルトは staticです */
  91. z-index : -1; /* labelの重なりz軸を 下にするのかな */
  92. top : 4px; /* 上から4px */
  93. left : 0; /* 左から0 */
  94. width : 100%; /* 横幅 100%にします */
  95. transition : 0.3s; /* 要素の2つの状態間の変化を0.5秒で操作します */
  96. letter-spacing: 0.5px; /* 文字の間隔を指定します。*/
  97. color : #aaaaaa; /* ラベルの文字の色を灰色っぽいいろにします */
  98. }
  99. /** reserve_type_textのforcusに関連する labelのクラスを指定します */
  100. .reserve_type_text:focus ~ label,
  101. .reserve_input_div.reserve_type_text ~ label {
  102. font-size : 12px; /* 文字サイズを小さくします */
  103. top : -16px; /* 文字位置を上にします テキストの中から上に移動 */
  104. transition : 0.3s; /* 要素の2つの状態間の変化を0.4秒で操作します */
  105. color : #da3c41; /* 赤文字 */
  106. }
  107. /** reserve_input_div_button 登録ボタンで使用します */
  108. .reserve_input_div_button {
  109. text-align : center; /* 文字を中央に寄せます */
  110. margin : 10px auto; /* divを中央に寄せます */
  111. }
  112. /** submit_insert 登録ボタンのデザインです */
  113. .submit_insert {
  114. position : relative; /* reserve_input_div_button からみて相対的な位置を設定します。 positionのデフォルトは staticです */
  115. color : #fff; /* 文字色白 */
  116. width : 120px; /* 横幅 120px */
  117. height : 50px; /* 高さ 50px */
  118. line-height: 50px; /* 高さ 50px */
  119. border-radius: 12px; /* 枠に丸みを付けます */
  120. text-align : center; /* 文字を中央に寄せます */
  121. font-family: 'Noto Serif JP', serif; /* googleフォントです */
  122. font-size : 16px; /* 文字のサイズです */
  123. background-color: #465DAA; /* ボタンの背景色です */
  124. box-shadow : 0 1px 1px rgba(0, 0, 0, 0.28);
  125. /* ボックスの影を付けます */
  126. }
  127. /** -------------------------------------------------- */
  128. /** リスト */
  129. /** -------------------------------------------------- */
  130. /** reserveのlist部分で使用します */
  131. .reserve_list {
  132. display : grid; /* gridを使います */
  133. border-radius : 12px; /* 枠に丸みを付けます */
  134. position : relative; /* reserve_input_div_button からみて相対的な位置を設定します。 positionのデフォルトは staticです */
  135. box-sizing : border-box; /* ボックスサイズの算出方法を指定します パディングとボーダーを幅と高さに含めています */
  136. border : 1px solid rgba(70,93,170,1);
  137. /* 枠を付けます */
  138. }
  139. /** reserveのlist部分の行で使用します */
  140. .reserve_list_row {
  141. display : grid; /* gridを使います */
  142. grid-template-columns : 150px 1fr; /* 150px 1 fr*/
  143. background-color : #fff; /* 文字色 */
  144. border-top : 1px solid rgba(70,93,170,1);
  145. /* 枠を付けます */
  146. }
  147. /** グリッドのヘッダー部分 */
  148. .reserve_list_row-houre {
  149. color : #fff; /* 文字色 */
  150. background-color: #465DAA;
  151. /* 背景色 */
  152. border-bottom : 1px solid rgba(0, 0, 0, 0.1);
  153. /* 枠線 */
  154. grid-template-columns : 150px repeat(24, 1fr);
  155. /* 150px 1frで24時間の枠を作成 */
  156. }
  157. /** グリッドの最初部分 */
  158. .reserve_list_row-houre .reserve_list_row-first {
  159. border-top : 0; /* 上線 */
  160. background-color : #465DAA; /* 背景色 */
  161. }
  162. /** グリッドの最初部分 のspan */
  163. .reserve_list_row-houre span {
  164. text-align : center; /* 文字中央よせ */
  165. font-size : 12px; /* 文字サイズ */
  166. align-self : center; /* 中央配置 *
  167. font-weight: bold; /* 文字太さ*/
  168. padding : 20px 0; /* 内側を操作します。 上下20px 左右0 で内側に余白を付けます */
  169. }
  170. /** グリッドのライン部分 */
  171. .reserve_list_row-lines {
  172. position : absolute; /* reserve_type_text からみて絶対的な位置を設定します。 positionのデフォルトは staticです */
  173. height : 100%; /* 高さ100% */
  174. width : 100%; /* 横幅100% */
  175. background-color : transparent; /* 背景色透過 */
  176. grid-template-columns : 150px repeat(24, 1fr);
  177. /* 150px 1frで24時間の枠を作成 */
  178. }
  179. /** グリッドのライン部分 のspan */
  180. .reserve_list_row-lines span {
  181. display : block; /* ブロック要素にします */
  182. border-right : 1px solid rgba(0, 0, 0, 0.1);
  183. /* 左枠線 */
  184. }
  185. /** グリッドのライン */
  186. .reserve_list_row-first {
  187. background-color : #fff; /* 背景色 白 */
  188. border-width : 1px 0 0 0; /* 線の太さ 上*/
  189. border-color : rgba(0, 0, 0, 0.1); /* 線の色 */
  190. border-style : solid; /* 実践 */
  191. padding : 15px 0; /* 内側を操作します。 上下左右 15px で内側に余白を付けます */
  192. font-size : 12px; /* 文字のサイズ */
  193. font-weight: bold; /* 太文字 */
  194. text-align : center; /* 中央寄せ */
  195. }
  196. /** 文字テキスト */
  197. .reserve_text {
  198. text-align : center; /* 中央寄せ */
  199. font-family: 'Noto Serif JP', serif; /* googleフォントです */
  200. }
  201. /** 文字テキスト */
  202. .reserve_list_row-bars {
  203. list-style : none; /* マーカーを外す */
  204. display : grid; /* gridを使います */
  205. padding : 9px 0; /* 内側を操作します。 上下左右 15px で内側に余白を付けます */
  206. margin : 0; /* 外側を操作します。 上下左右 0px で内側に余白を付けます */
  207. grid-template-columns: repeat(24, 1fr);
  208. /* 150px 1frで24時間の枠を作成 */
  209. grid-gap : 8px 0; /* グリッドの間の線 */
  210. border-top : 1px solid rgba(221, 221, 221, 0.8);
  211. /* 上線 */
  212. text-align : center; /* 文字の中央よせ */
  213. }
  214. /** ユーザー名 */
  215. .user_name {
  216. font-family: 'Noto Serif JP', serif; /* googleフォントです */
  217. font-size : 12px; /* 文字のサイズ */
  218. color : #fff; /* 文字色 白 */
  219. }
  220. </style>
  221. </head>
  222. <body>
  223. <div class="wrapper"><!-- wrapper start -->
  224. <header>
  225. <h1>Meeting room reservation system</h1>
  226. </header>
  227. <article>
  228. <!-- 入力フォームと送信ボタンは formタグで囲み postメソッドで送信する -->
  229. <form action="" method="POST">
  230. <!--POSTを行う際に必要 -->
  231. {% csrf_token %}
  232. <div class="reserve_wrapper"><!-- reserve_wrapper start -->
  233. <!-- -------------------------------------------------- -->
  234. <!-- 入力フォーム -->
  235. <!-- -------------------------------------------------- -->
  236. <div class="reserve_input"><!-- reserve_input start -->
  237. <!-- 予約ID -->
  238. <div class="reserve_input_div">
  239. {{ form.reserve_id }}
  240. <label>{{ form.reserve_id.label }}</label>
  241. <span class="focus_line"></span>
  242. </div>
  243. <!-- 会議室ID -->
  244. <div class="reserve_input_div">
  245. {{ form.room_id }}
  246. <label>{{ form.room_id.label }}</label>
  247. <span class="focus_line"></span>
  248. </div>
  249. <!-- 利用者 -->
  250. <div class="reserve_input_div">
  251. {{ form.reserve_name }}
  252. <label>{{ form.reserve_name.label }}</label>
  253. <span class="focus_line"></span>
  254. </div>
  255. <!-- 開始日時 -->
  256. <div class="reserve_input_div">
  257. {{ form.start_date_time }}
  258. <label>{{ form.start_date_time.label }}</label>
  259. <span class="focus_line"></span>
  260. </div>
  261. <!-- 終了日時 -->
  262. <div class="reserve_input_div">
  263. {{ form.end_date_time }}
  264. <label>{{ form.end_date_time.label }}</label>
  265. <span class="focus_line"></span>
  266. </div>
  267. <div class="reserve_input_div_button">
  268. <input type="submit" class="submit_insert" value="登 録">
  269. </div>
  270. </div><!-- reserve_input end -->
  271. <!-- -------------------------------------------------- -->
  272. <!-- 入力 リスト -->
  273. <!-- -------------------------------------------------- -->
  274. <div class="reserve_list"><!-- reserve_list start -->
  275. <div class="reserve_list_row reserve_list_row-houre">
  276. <!-- 24時間の表記 -->
  277. <div class="reserve_list_row-first"></div>
  278. {% for houre in ''|center:24 %}
  279. <span>{{forloop.counter}}</span>
  280. {% endfor %}
  281. </div>
  282. <!-- 縦線の表記 -->
  283. <div class="reserve_list_row reserve_list_row-lines">
  284. {% for count in ''|center:24 %}
  285. <span></span>
  286. {% endfor %}
  287. </div>
  288. <!-- 会議室の内容 -->
  289. {% for reserv in reserve_data %}
  290. <div class="reserve_list_row">
  291. <div class="reserve_list_row-first">
  292. <div class="reserve_text">会議室{{reserv.room_id}}:予約[{{reserv.id}}]</div>
  293. </div>
  294. <ul class="reserve_list_row-bars">
  295. <li style="grid-column: {{reserv.start_date_time|date:'H'}}/{{reserv.end_date_time|date:'H'}}; background-color: #465DAA;"><span class="user_name">{{reserv.user}}</span></li>
  296. </ul>
  297. </div>
  298. {% endfor %}
  299. </div>
  300. </div><!-- reserve_list end -->
  301. </div><!-- reserve_wrapper end -->
  302. </form>
  303. </article>
  304. <footer></footer>
  305. </div><!-- wrapper end -->
  306. </body>
  307. </html>

mrrs/forms.pyコーディング

フロントのデザインを修正します。

  1. from django import forms
  2. class reserve_room(forms.Form):
  3. """
  4. reserve_roomのフォーム.
  5. """
  6. # 予約ID
  7. reserve_id = forms.CharField(
  8. label = 'ID',
  9. max_length = 20,
  10. required = True,
  11. widget = forms.TextInput(attrs={'class' : 'reserve_type_text'})
  12. )
  13. # 会議室ID
  14. room_id = forms.CharField(
  15. label = '会議室ID',
  16. max_length = 20,
  17. required = True,
  18. widget = forms.TextInput(attrs={'class' : 'reserve_type_text'})
  19. )
  20. # 利用者
  21. reserve_name = forms.CharField(
  22. label = '利用者',
  23. max_length = 20,
  24. required = True,
  25. widget = forms.TextInput(attrs={'class' : 'reserve_type_text'})
  26. )
  27. # 開始日時
  28. start_date_time = forms.CharField(
  29. label = '開始日時',
  30. max_length = 20,
  31. required = True,
  32. widget = forms.TextInput(attrs={'class' : 'reserve_type_text'})
  33. )
  34. # 終了日時
  35. end_date_time = forms.CharField(
  36. label = '終了日時',
  37. max_length = 20,
  38. required = True,
  39. widget = forms.TextInput(attrs={'class' : 'reserve_type_text'})
  40. )

formにhtmlのデザイン属性のclassを追加しています

まとめ

サーバーを起動します。

  1. python manage.py runserver

urlを入力します。

http://127.0.0.1:8000/mrrs/

以下は完成のイメージです。

コメント

0 件のコメント:

コメントを投稿

コメントをお待ちしています。