從一個實例學習----FLASK-WTF

来源:https://www.cnblogs.com/haizhongdenta/archive/2018/02/21/8457070.html
-Advertisement-
Play Games

本案例通過實現一個註冊頁面的編寫,來帶你瞭解FLASK-WTF的運用. 主要功能為表單基礎的功能--手機號碼必須為11位數,且通過資料庫查找不能有已經註冊的了,密碼要求輸入兩遍且必須一樣,且所有內容不能為空的提示等內容.那麼現在就開始把! 一.創建表單類. 首先運用flask-wtf你必須確保你的環 ...


  本案例通過實現一個註冊頁面的編寫,來帶你瞭解FLASK-WTF的運用.

  

  主要功能為表單基礎的功能--手機號碼必須為11位數,且通過資料庫查找不能有已經註冊的了,密碼要求輸入兩遍且必須一樣,且所有內容不能為空的提示等內容.那麼現在就開始把!

  

  一.創建表單類.

    首先運用flask-wtf你必須確保你的環境中已經安裝wtf,如果你是python3的環境,我們可以通過 pip3 install Flask-WTF 來進行安裝.

 

    安裝好了之後我們來進行導入:    

      from flask_wtf import Form
      from wtforms import StringField, SubmitField, PasswordField, ValidationError
      from wtforms.validators import DataRequired, EqualTo, Length
      from models import USER

    

    讓我們一步步來理解!!

    

    第一行代碼我們從 falsk-wtf 中導入了 Form 類,以後我們創建的所有表單類都要繼承自這個類.

    第二行代碼我們從 wtforms  中導入了 StringField,SubmitField,PasswordField,ValidationError ,那麼這些東西是用來乾什麼的呢?我相信如果稍微過一些HTML的人應該都認識HTML表單中<input>元素的type="text",type="submit",type="password"這類屬性吧.原理是一樣的.

    第三行代碼我們又從 wtforms.validators 中導入了 DataRequired,EqualTo,Length ,其中 DataRequired用來驗證表單數據不能為空, EqualTo 常用來比較兩個代碼是不是相等, Length 用來限制字元長度.

    第四行代碼是導入資料庫模型的USER類,用來查詢資料庫中是不是已經註冊了手機號.如果已經註冊了,再用第二行代碼的 ValidationError 來拋出警告.

    

    實例如下:      

    class Regist(Form):
        phone = StringField("請輸入手機號", validators=[DataRequired(), Length(min=11, max=11, message="手機號碼是11位數")])
        name = StringField("請輸入用戶名", validators=[DataRequired()])
        password = PasswordField("請輸入密碼", validators=[DataRequired()])
        password1 = PasswordField("請重覆密碼", validators=[DataRequired(), EqualTo("password", "密碼必須一樣")])
        submit = SubmitField("立即提交")

        def validate_phone(self, field):
            if USER.query.filter_by(phone=field.data).first():
                raise ValidationError("傻子,你的手機號碼被註冊了!!")

     如此一個註冊表單類就建立成功了!!

  

 二.視圖函數中編寫邏輯

    我先直接把代碼列出來:     

      # 註冊界面
      @app.route("/regist/", methods=["GET", "POST"])
      def regist():
          form = Regist()
          if form.validate_on_submit():
              telephone = form.phone.data
              username = form.name.data
              password = form.password.data
              if form.validate_phone():
                  user = USER(phone=telephone, name=username, password=password)
                  db.session.add(user)
                  db.session.commit()
                  return redirect(url_for("login"))
          else:
              return render_template("regist.html", form=form)

       

      我們先用  form=Regist() 實例化一個表單類的對象,後面緊跟著一個條件語句, validate_on_submit 意思是判斷表單內的數據是不是為空,最大長度是不是....等先前設置的限制條件以及判斷表單內容是不是提交過了.如果是,那麼就意味著我們提交了表單數據,並且進行後面的操作,如果不是.就意味著我們只是打開了這個註冊頁面,用 return render_template("regist.html", form=form)  渲染模板,並且把實例化的對象form作為參數傳遞到模板中.

      

      我們接著繼續提交表單後的代碼理解 telephone = form.phone.data    username = form.name.data   password = form.password.data  這三行代碼是獲取用戶填寫的手機號,用戶名,密碼這些數據.

      

      獲取之後,我們在進行判斷.調用註冊表單類的validate_phone()函數,如果忘記內容可以再看看上面.如果為true,就代表著這個手機號沒有被註冊,繼續進行後面的把用戶填寫的數據存進資料庫的操作.

        user = USER(phone=telephone, name=username, password=password)

      

      這段代碼的意思是USER用戶表中有phone,name,password的屬性.我們把獲取的用戶數據telephone,username,password賦值給它,在通過 db.session.add(user) db.session.commit() 這兩行代碼提交到資料庫中.

      

      資料庫中是用到了flask-sqlalchemy,這裡不做具體講解,以後有機會再講.我把代碼貼出來:         

lass USER(db.Model):
    __tablename__="user"
                 id=db.Column(db.Integer,primary_key=True,autoincrement=True)
    phone=db.Column(db.String(11),nullable=False)
    name=db.Column(db.String(50),nullable=False)
    password=db.Column(db.String(100),nullable=False)        

   

 三.在模板中運用

      第三步也是最後一步.如果你的項目運用了flask-bootstrap的話,可以通過:         

        {% import "bootstrap/wtf.html" as wtf %}

        <form action="" method="post">
              {% block page_content %}
                    {{ wtf.quick_form(form) }}
              {% endblock %}
          </form>

      

      wtf.quick_form(form)直接生成表單,是不是很方便?當然沒有樣式,如果你要添加樣式的話可以這樣:        

          <form method="POST">
            {{ form.hidden_tag() }}
            {{ form.name.label }} {{ form.name(id='my-text-field') }}
            {{ form.submit() }}
            </form>

      

      好了,到這裡就結束了.如果你把這些全弄懂了,你還可以直接閱讀它的中文文檔

                                                              待續..........


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 說起負載均衡一般都會想到服務端的負載均衡,常用產品包括LBS硬體或雲服務、Nginx等,都是耳熟能詳的產品。 而Spring Cloud提供了讓服務調用端具備負載均衡能力的Ribbon,通過和Eureka的緊密結合,不用在服務集群內再架設負載均衡服務,很大程度簡化了服務集群內的架構。 具體也不想多寫 ...
  • 協程 1.定義 協程,顧名思義,程式協商著運行,並非像線程那樣爭搶著運行。協程又叫微線程,一種用戶態輕量級線程。協程就是一個單線程(一個腳本運行的都是單線程) 協程擁有自己的寄存器上下文和棧。協程調度切換時,將寄存器上下文和棧保存到其他地方,在切回來的時候,恢復先前保存的寄存器上下文和棧。 協程能保 ...
  • 次小生成樹 次小生成樹 我們已經熟知了求最小生成樹的方法,用kruskal,prim演算法都可以搞 那麼我們如何求次小生成樹呢? 這裡次小生成樹的定義是 邊權和嚴格大於最小生成樹的邊權和最小的生成樹 求解方法 次小生成樹嘛,肯定和最小生成樹脫不了關係 那麼我們首先求出最小生成樹 接下來,一個比較顯然的 ...
  • 題目描述 小C最近學了很多最小生成樹的演算法,Prim演算法、Kurskal演算法、消圈演算法等等。正當小C洋洋得意之時,小P又來潑小C冷水了。小P說,讓小C求出一個無向圖的次小生成樹,而且這個次小生成樹還得是嚴格次小的,也就是說:如果最小生成樹選擇的邊集是EM,嚴格次小生成樹選擇的邊集是ES,那麼需要滿足 ...
  • JSTL JSTL就是JSP標準標簽庫(JavaServer Pages Standard Tag Library, JSTL)是一個定製標簽庫的集合,用來解決像遍歷Map或集合、條件測試、XML處理,甚至資料庫訪問和數據操作等常見的問題。 (JSTL的使用需要有配置好兩個jar包,分別是jstl. ...
  • Servlet規範是一套技術標準,包含與Web應用相關的一系列介面,而具體的Servlet容器負責提供標準的實現,如Tomcat。 Servlet的實例對象由Servlet容器負責創建,Servlet的方法由容器在特定情況下調用,Servlet容器在關閉Web應用時銷毀Servlet對象實例。 1. ...
  • 今天從開始寫了一個jdbc連接mysql驅動的程式 真的是各種報錯啊 首先這是代碼 嗯,先說下問題 項目運行時會出現 首先這個錯誤我無法復現,因為我的項目是maven管理的 jdbc驅動是5.1.6 這個錯誤是因為maven網路不好而引起的jar包出現錯誤,只要eclispe載入jar的位元組文件不是 ...
  • 第一種參數獲取方式: 編寫一個前端頁面,提交表單,做示例: 每次訪問Action都會創建一個新的實例(線程安全): 第二種方式獲取參數: 封裝一個實體類: 表單要修改下: 獲取參數: 第三種方式獲取參數: 模型驅動: 前端代碼: 獲取參數: 第四種獲取參數方式: 集合類型封裝: 前端表單: 獲取參數 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...