最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一個基于flask的web應用誕生 使用模板引擎和表單插件(2)

 更新時間:2017年04月11日 08:53:11   作者:雙魚座的牛  
一個基于flask的web應用誕生第二篇,這篇文章主要介紹了如何使用jinja2模板引擎和wtf表單插件,具有一定的參考價值,感興趣的小伙伴們可以參考一下

經過了第一章的內容,已經可以做出一些簡單的頁面,首先用這種方式做一個登錄頁面,首先要創(chuàng)建一個login的路由方法:

@app.route("/login",methods=["GET"])
def login():
 html="<form method='post'>" \
 "<table>" \
 "<tr><td>請輸入用戶名</td><td><input type='text' name='username'/></td></tr>" \
 "<tr><td>請輸入密碼</td><td><input type='password' name='password'/></td></tr>" \
 "<tr><td><input type='submit' value='登錄'/></td></tr>" \
 "</table>" \
 "</post>"
 return html

這個頁面返回后是一個簡單的登錄頁,顯示結果如下:

然后是一個登錄的post返回頁:

@app.route("/login",methods=["POST"])
def loginPost():
 username=request.form.get("username","")
 password=request.form.get("password","")
 if username=="test" and password=="123" :
 return "登錄成功"
 else:
 return "登錄失敗"

輸入test和123后,顯示登錄成功

功能上當然是實現(xiàn)了,但是從其他方面來說,卻很難說它是一個能夠實際應用的程序,即使不考慮js腳本和css樣式表,就從簡簡單單的維護來說,就是一場噩夢,比如說像增加一個驗證碼框,我想不會有人認為這是一件愉快的工作。

所以,首先來說,我們要把頁面html部分立出來,這點,flask提供了jinja2模板引擎來實現(xiàn)。

jinja2模板引擎同樣符合flask最基礎的約定,即眾多配置中都有一個基礎的默認值,相對jinja2來說,有一個最重要的默認值,即模板文件放在templates文件夾,這個文件夾雖然可以自定義,但目前來說,使用默認值已經足夠了。

好,首先在PyCharm的項目根目錄創(chuàng)建templates文件夾,然后在文件夾內創(chuàng)建login.html文件,當然目錄結構如下:

在login.html中輸入代碼如下:

<!DOCTYPE html>
<html>
 <head>
 <title>歡迎您登陸--牛博客</title>
 </head>
 <body>
 <form method='post'>
 <table>
 <tr><td>請輸入用戶名</td><td><input type='text' name='username'/></td></tr>
 <tr><td>請輸入密碼</td><td><input type='password' name='password'/></td></tr>
 <tr><td><input type='submit' value='登錄'/></td></tr>
 </table>
 </form>
 </body>
</html>

代碼很簡單,也名沒有進行樣式方面的美化,其實目前就我來說,僅僅是因為有了智能感知,就有足夠的理由使用模板了,然后,對default.py的login方法進行修改代碼為:

from flask import render_template #頭部,引入模板渲染方法

@app.route("/login",methods=["GET"])
def login():
 return render_template("/login.html") 

 #渲染模板,默認找templates文件夾下的login.html文件

由于html模板內的代碼和直接直接寫在py文件中的一樣,所以此時刷新頁面,顯示效果和剛剛相同,雖然顯示效果沒有明顯的改觀,但此時如果修改html中的某一元素,則會方便很多。

關于jinja2模板引擎還支持一些更強大的功能,比如使用index做一些說明:

基本用法

修改default.py中的部分代碼為:

from flask import render_template #頁頭,導入渲染函數(shù)

@app.route("/")
def index():
 return render_template("index.html",site_name='myblog')

index.html中的代碼為:

<!DOCTYPE html>
<html>
<head>
 <meta charset="UTF-8">
 <title>{{site_name}}</title>
</head>
<body>
<h1>這個站點的名字為 {{site_name}} </h1>
</body>
</html>

flask的render_template函數(shù)支持多參數(shù),其中函數(shù)的第一個參數(shù)為模板名,之后可以提供若干參數(shù),均為鍵值對,為模板中的變量提供數(shù)據(jù)。如此例子中,為site_name提供了myblog的值,而模板內使用{{參數(shù)名}}來表示一個變量

此時瀏覽器輸入地址輸出結果為:

<!DOCTYPE html>
<html>
<head>
 <meta charset="UTF-8">
 <title>myblog</title>
</head>
<body>
<h1>這個站點的名字為 myblog </h1>
</body>
</html>

jinja2模板還提供了一些變量過濾器,如代碼:

<!DOCTYPE html>
<html>
<head>
 <meta charset="UTF-8">
 <title>{{site_name|upper}}</title>
</head>
<body>
<h1>這個站點的名字為 {{site_name}} </h1>
</body>
</html>

這時輸出為:

<!DOCTYPE html>
<html>
<head>
 <meta charset="UTF-8">
 <title>MYBLOG</title>
</head>
<body>
<h1>這個站點的名字為 myblog </h1>
</body>
</html>

常用過濾器如下

safe 不轉義
capitalize 首字母大寫
lower 轉換為小寫
upper 轉換為大寫
trim 去收尾空格
striptages 去除html標簽

除此之外,Jinja2的變量還可以是一些復雜類型,甚至可以使用一些復雜類型的常用方法,如:

<!DOCTYPE html>
<html>
<head>
 <meta charset="UTF-8">
 <title>{{site_name[2:]}}</title> 
</head>
<body>
<h1>這個站點的名字為 {{site_name}} </h1>
</body>
</html>

這時輸出為:

<!DOCTYPE html>
<html>
<head>
 <meta charset="UTF-8">
 <title>blog</title>
</head>
<body>
<h1>這個站點的名字為 myblog </h1>
</body>
</html>

控制語句

控制語句是一個模板的基本功能,同樣的jinja2也提供了相應的功能:

//選擇
{% if name=='test' %}
 這是測試
{% else %}
 {{name}},你好
{% endif %}

//循環(huán)
<ul>
 {% for blog in blogs%}
 {{ blog.title }}
 {% endfor%}
</ul>

除了這些基本用法,模板還為一些代碼的重復使用提供了宏的功能,如將如下代碼寫入macros.html文件中

{% macro render_title(blog)%}
 <li>{{blog.title}}</li>
{% endmacro%}

然后在之前的模板中:

{% import 'macros.html' as macros %}
<ul>
 {% for blog in blogs %}
 {{ macros.render_title(blog) }}
 {% endfor %}
</ul>

執(zhí)行結果與之前的完全相同

Jinja2還提供了一個更為強大的功能,即模板繼承,這個個人感覺有點像java的sitemesh框架,它首先需要創(chuàng)建一個base.html的基模板:

<!DOCTYPE html>
<html>
<head>
 {% block head %}
 <meta charset="UTF-8">
 <title>{% block title%} {% endblock %} - 牛博客</title>
 <script src="http://cdn.bootcss.com/jquery/2.2.4/jquery.min.js"></script>
 {% endblock %}
</head>
<body>
 {% block body %}
 {% endblock %}
</body>
</html>

其中block標簽的意思表示在子模板中可以修改,具體到此例子,則可修改的部分為 head,title,body。下面為子模板代碼:

{% extends "base.html" %}
{% block title %}{{site_name[2:]}}{% endblock %}
{% block head %}
 {{super()}}
{% endblock %}

{% block body %}
 <h1>這個站點的名字為 {{site_name}} </h1>
{% endblock %}

此時執(zhí)行結果仍為:

<!DOCTYPE html>
<html>
<head>
 <meta charset="UTF-8">
 <title>blog</title>
</head>
<body>
<h1>這個站點的名字為 myblog </h1>
</body>
</html>

現(xiàn)在有了模板引擎,不管怎么說,僅僅就頁面層來說,已經可以很輕松的做出一些不錯的功能了,但很明顯,現(xiàn)在的界面還不是很美觀,下一章將把現(xiàn)在主流的前端框架bootstrap與flask框架進行整合。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Python pickle模塊用法實例

    Python pickle模塊用法實例

    這篇文章主要介紹了Python pickle模塊用法實例,python的pickle模塊實現(xiàn)了基本的數(shù)據(jù)序列和反序列化,需要的朋友可以參考下
    2015-04-04
  • python Django連接MySQL數(shù)據(jù)庫做增刪改查

    python Django連接MySQL數(shù)據(jù)庫做增刪改查

    本文寫的是python Django連接MySQL數(shù)據(jù)庫的步驟,提供增刪改查的代碼
    2013-11-11
  • PyQt5中向單元格添加控件的方法示例

    PyQt5中向單元格添加控件的方法示例

    這篇文章主要介紹了PyQt5中向單元格添加控件的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • python如何使用unittest測試接口

    python如何使用unittest測試接口

    這篇文章主要為大家詳細介紹了python如何使用unittest測試接口,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Python Pydantic進行數(shù)據(jù)驗證的方法詳解

    Python Pydantic進行數(shù)據(jù)驗證的方法詳解

    在 Python 中,有許多庫可用于數(shù)據(jù)驗證和處理,其中一個流行的選擇是 Pydantic,下面就跟隨小編一起學習一下Pydantic 的基本概念和用法吧
    2024-01-01
  • Python數(shù)據(jù)分析Matplotlib?柱狀圖繪制

    Python數(shù)據(jù)分析Matplotlib?柱狀圖繪制

    本文主要介紹了Python數(shù)據(jù)分析Matplotlib柱狀圖繪制,Matplotlib提供了bar()方法繪制柱狀圖,下面具體繪制介紹需要的小伙伴可以參考以一下
    2022-05-05
  • Pytorch1.5.1版本安裝的方法步驟

    Pytorch1.5.1版本安裝的方法步驟

    這篇文章主要介紹了Pytorch1.5.1版本安裝的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Python數(shù)學建模學習模擬退火算法約束條件處理示例解析

    Python數(shù)學建模學習模擬退火算法約束條件處理示例解析

    線性規(guī)劃(Linear programming),是研究線性約束條件下線性目標函數(shù)的極值問題的優(yōu)化方法,常用于解決利用現(xiàn)有的資源得到最優(yōu)決策的問題,本文使用懲罰函數(shù)法,分析模擬退火算法處理線性規(guī)劃問題,相關內容也適用于非線性規(guī)劃問題
    2021-10-10
  • 用python3 urllib破解有道翻譯反爬蟲機制詳解

    用python3 urllib破解有道翻譯反爬蟲機制詳解

    這篇文章主要介紹了python破解網易反爬蟲機制詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • Python為何不能用可變對象作為默認參數(shù)的值

    Python為何不能用可變對象作為默認參數(shù)的值

    這篇文章主要介紹了Python為何不能用可變對象作為默認參數(shù)的值,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07

最新評論

营口市| 太谷县| 上虞市| 嘉善县| 集安市| 尉氏县| 霍城县| 乐陵市| 罗甸县| 仙游县| 刚察县| 桦南县| 宾阳县| 五台县| 安徽省| 东兴市| 许昌市| 喀喇| 兰西县| 上林县| 虹口区| 武川县| 交城县| 广灵县| 黑龙江省| 韶山市| 宜阳县| 五寨县| 资中县| 呈贡县| 浏阳市| 宜兴市| 绿春县| 江达县| 崇阳县| 平湖市| 天柱县| 曲阜市| 颍上县| 安平县| 耒阳市|