# Flask實作_使用者登入功能_01_優化Html版面_設置base基版 ###### tags: `python` `flask` ## 說明 隨著專案的成長,後面我們還會需要幾個Html頁面,透過`jinja2`模板的繼承可以減化大量Html開發的工作,因此我們需要設置一個屬於自己的基板,方便後續利用繼承的方式來建置網頁。 我們預計在這個基版中加入幾個功能: * `base.html` * 繼承bootstrap的base * 設置導覽列(navbar) * 保留content block做內容顯示 * 在content內設置message的顯示block ## 作業說明 新增一個Html,命名為`base.html`,如下: :::success * 文件:`templates\base.html` * 說明:建立基礎版面,繼承自`bootstrap\base.html` ```htmlmixed= {% extends "bootstrap\base.html" %} {% block title %}UserRegister{% endblock title %} ``` 第1行:設定繼承`bootstrap\base.html` 第2行:設置title ::: 加入導覽列,這部份可至[bootstrap](https://getbootstrap.com/docs/4.0/components/navbar/)取範例,調整過程中可以利用[jsbin](https://jsbin.com/)來協助。 :::success * 文件:`templates\base.html` * 說明:加入導覽列 ```htmlmixed=3 {% block navbar %} <nav class="navbar navbar-default"> <div class="container-fluid"> <!-- Brand and toggle get grouped for better mobile display --> <div class="navbar-header"> <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <!-- 透過url_for設定HOME連結綁定index --> <a class="navbar-brand" href="{{ url_for('index')}}">HOME</a> </div> <!-- Collect the nav links, forms, and other content for toggling --> <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> <ul class="nav navbar-nav"> <!-- 透過url_for設定USERINFO連結綁定userinfo --> <li><a href="{{ url_for('userinfo') }}">USERINFO</a></li> <!-- 透過url_for設定LOGOUT連結綁定LOGOUT --> <li><a href="{{ url_for('logout') }}">LOGOUT</a></li> <!-- 透過url_for設定LOGIN連結綁定LOGIN --> <li><a href="{{ url_for('login') }}">LOGIN</a></li> </ul> </div><!-- /.navbar-collapse --> </div><!-- /.container-fluid --> </nav> {% endblock navbar %} ``` ::: 我們設置幾個簡單的路由來確認我們的`navbar`是否正常,如下: :::success * 文件:`app_blog\author\view.py` * 說明:設置幾個簡單的路由來確認`navbar`的設置是否正常 ```python= #...上略...# @app.route('/test') def test_index(): return render_template('base.html') @app.route('/login') def login(): return 'Here is Login' @app.route('/logout') def logout(): return 'Here is Logout' @app.route('/userinfo') def userinfo(): return 'Here is UserINFO' ``` ::: :::warning * 測試 * 測試連結:http://127.0.0.1:5000/test * 測試說明:這是首頁的狀態  * 測試說明:這是響應式網頁的狀態  ::: 首頁正常之後,我們時常需要flash message來傳遞訊息給使用者,在基版上加入一個block來顯示,如下調整: :::success * 文件:`templates\base.html` * 說明:設置一個content block做為後續開發的保留內容區,並在內部加入一個message的區塊來顯示訊息 ```htmlmixed= {% block content %} <div class="container"> <!-- 用來接後端傳來的flash-message --> {% for message in get_flashed_messages() %} <div class="alert alert-warning"> <!-- 弄一個x的button,點擊之後讓訊息消失,可參考bootstrap說明 --> <button type="button" class="close" data-dismiss="alert">×</button> {{ message }} </div> {% endfor %} {% block page_content %}{% endblock %} </div> {% endblock content %} ``` ::: :::warning * 測試 * 測試說明:測試message block顯示訊息的狀況 ```python= # 追加import from flask import flash @app.route('/test') def test_index(): flash('flash-1') flash('flash-2') flash('flash-3') return render_template('base.html') ```  這個測試路由設置傳送三次的flash message,上圖來看顯示狀況良好,點擊『x』之後關閉正常。 ::: ## 總結 這一節我們成功的配置了一個自己的基版,並且利用了諸多`bootstrap`的元素來協助我們建立一個響應式頁面,`bootstrap`是目前前端最常使用的css框架,花時間學習是值得的。 **上一話:**[Flask實作_使用者登入功能_00_使用者登入篇導論](https://hackmd.io/s/ry_HjCZIG) **下一話:**[Flask實作_使用者登入功能_02_調整register頁面](https://hackmd.io/s/BJM_IAzC7) ### bootstrap bootstrap目前已經來到4了,官方認證的就是[六角學院](http://bootstrap.hexschool.com/)所翻的部份,而六角學院也有線上課程可以購買,基本上買他們的課程是真的很不錯,院長由淺而深的教學,會帶你一步一步的了解,我沒買過,我只買過javascript,唯一的感想就是補充補不完,一路追加,非常值得。
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.