国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python的Flask框架中web表單的教程

2019-11-25 17:41:36
字體:
來源:轉載
供稿:網友

 概要

在前面章節我們為主頁定義了一個簡單的模板,部分尚未實現的模塊如用戶或帖子等使用模擬的對象作為臨時占位。

本章我們將看到如何利用web表單填補這些空白。

web表單是web應用中最基本的構建要素,我們將通過表單來實現用戶發帖和應用登錄功能。

完成本章內容你需要基于前面章節完成的微博應用代碼,請確認這些代碼已安裝并能正常運行。

配置

Flask-WTF是WTForms項目的Flask框架擴展,我們將用他來幫助我們處理web表單。

大部分Flask擴展都需要定義相關配置項,所以我們先來在應用根目錄下創建一個配置文件以備使用。我們先這樣創建 (fileconfig.py):
 

CSRF_ENABLED = TrueSECRET_KEY = 'you-will-never-guess'

很簡單吧,這是Flask-WTF需要用到的2個配置項。CSRF_ENABLED配置啟用了跨站請求攻擊保護,大部分情況下你都需要開啟此功能,這能使你的應用更安全。


SECRET_KEY設置當CSRF啟用時有效,這將生成一個加密的token供表單驗證使用,你要確保這個KEY足夠復雜不會被簡單推測。

現在這個配置文件已經基本可用了。項目創建完成我們可以創建如下文件并編輯(fileapp/__init__.py):
 

from flask import Flask app = Flask(__name__)app.config.from_object('config') from app import views

用戶登錄表單

使用Flask-WTF創建的表單就像一個對象,需要從Form類繼承子類。然后在這個子類中定義一些類的屬性變量作為表單字段就可以了。

我們要創建一個登錄表單,用來進行用戶身份識別。但跟平常需要驗證用戶名和密碼的登錄方式不同,我們將使用 OpenId 來處理登錄過程。使用OpenId的好處就是我們不用管那些用戶名和密碼的認證過程,交給 OpenId 去搞定,它會返回給我們用戶驗證后的數據。這樣對于使用我們網站的用戶而言也更安全。


使用 OpenId 登錄只需要一個字符串,然后發送給 OpenId 服務器就行了。另外我們還需要在表單中加一個“記住我” 的選項框,這個是送給那些不想每次來我們網站都要進行身份認證的人。選擇這個選項后,首次登錄時會用cookie在他們的瀏覽器上記住他們的登錄信息,下次再進入網站時就不需要進行登錄操作。

開始我們的第一個表單吧 (fileapp/forms.py):
 

from flask.ext.wtf import Form, TextField, BooleanFieldfrom flask.ext.wtf import Required class LoginForm(Form):  openid = TextField('openid', validators = [Required()])  remember_me = BooleanField('remember_me', default = False)

欣賞一下這個類,多么的簡潔,多么的一目了然。如此簡單,但又十分的富有內涵。我們引入了一個 Form 類,然后繼承這個類,按需求還添加了 TextField 和 BooleanField 這兩個字段。

另外還引入了一個表單驗證函數 Required,這種驗證函數可以附加在字段里面,在用戶提交表單時它們會用來檢查用戶填寫的數據。這個 Required 函數是用來防止用戶提交空數據。Flask-WTF 中還有很多不同作用的表單驗證函數,我們將會在后面使用到它們。


表單模板

現在我們的問題就是需要一個顯示這個登錄表單的模板。好消息是我們剛剛創建的登錄表單類知道如何把字段轉換成HTML,所以我們只需要把注意力集中到頁面布局上。下面就是我們的登錄表單的模板 (fileapp/templates/login.html):
 

<!-- extend from base layout -->{% extends "base.html" %} {% block content %}<h1>Sign In</h1><form action="" method="post" name="login">  {{form.hidden_tag()}}  <p>    Please enter your OpenID:<br>    {{form.openid(size=80)}}<br>  </p>  <p>{{form.remember_me}} Remember Me</p>  <p><input type="submit" value="Sign In"></p></form>{% endblock %}

容我

主站蜘蛛池模板: 盐边县| 阿城市| 南康市| 永修县| 蕉岭县| 根河市| 都昌县| 曲阜市| 三江| 邵武市| 奉新县| 通州市| 五大连池市| 师宗县| 高要市| 威宁| 商河县| 安化县| 本溪市| 天镇县| 海淀区| 桃园县| 桂东县| 安福县| 名山县| 尚志市| 蓬安县| 阿拉善盟| 旬邑县| 屏东县| 晋宁县| 津市市| 深州市| 子长县| 濮阳县| 云梦县| 福泉市| 南城县| 时尚| 中山市| 泽州县|