flask基礎實現不再贅述,不瞭解的同學可以通過官方文件學習
http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-iii-web-forms
Step 1 新建查詢whois資訊的form類
在forms.py中新增如下程式碼:
1 2 3 4 5 6 7 |
# -*- coding: utf-8 -*- from flask.ext.wtf import Form from wtforms import StringField from wtforms.validators import DataRequired class WhoisForm(Form): myDomain = StringField('myDomain', validators=[DataRequired()]) |
很簡單,跟官方教程差不多
Step 2 建立Whois資訊模板
新建一個whois.html檔案,程式碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>GetWhois</title> </head> <body text=#000000 vLink=#205D83 aLink=#ff6600 link=#10304A bgColor=#ffffff text-align="center"> <div align="center"><a href="index"><img src="static/images/logo.png" width="270" height="129" border="0"></a> </div><BR> <BR><BR> <div align="center"><p><h1>Whois資訊查詢</h1></p></div> <P style="HEIGHT: 22px"></P> <div align="center"> <form action="" method="post" name="whois" text-align="center"> {{ form.hidden_tag() }} <p>{{form.myDomain(size=80)}}</p> <p><input type="submit" value="查詢"></p> </form></div> <div align="center"> <P style="HEIGHT: 30px"></P> <table width="800px" border="1"> {% for key in info %} <tr> <td width="150px" align="left"> {{ key }} :</td><td aligh="left">{{ info[key] }}</td> </tr> {%endfor%}</table><br/> </div> </body> </html> |
這裡只為做例項,所以沒有設定繼承模板,如果是一個整體的專案,建議通過繼承實現,保持風格一致。
例項通過whois模組得到相關資訊,返回的結果是一個字典,如圖所示
例項通過whois模組得到相關資訊,返回的結果是一個字典,如圖所示
所以用了以下jinja2語句將資訊輸出到網頁上
1 2 3 4 5 6 |
<table width="800px" border="1"> {% for key in info %} <tr> <td width="150px" align="left"> {{ key }} :</td><td aligh="left">{{ info[key] }}</td> </tr> {%endfor%}</table><br/> |
Step 3 Whois函式實現
在views.py中新增實現程式碼
1 2 3 4 5 6 7 |
@app.route('/whois',methods=['GET','POST']) def Whois(): form = WhoisForm() if form.validate_on_submit(): info_dict = GetWhois.MyWhois(form.myDomain.data) return render_template('whois.html',form = form, info = info_dict) return render_template('whois.html',form = form) |
其中GetWhois.MyWhois函式的實現,在GetWhois.py中實現,具體為
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/usr/bin/env python # -*- encoding: utf-8 -*- import whois def MyWhois(mydomain): try: w = whois.whois(mydomain) return w except Exception,e: print Exception,e return {} |
ok,程式到這裡基本可以實現需要的內容了,查詢效果如圖
Step 4 進一步優化
我們看到輸出到網頁時,如status、domain_name等欄位的值是列表,是否可以將其進一步分解輸出呢,答案是可行的。
我們可以利用jinja2的內建檢查器來判斷引數是否為list,若是,則分解列印
於是將whois.html修改成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<table width="800px" border="1"> {% for key in info %} <tr> <td width="150px" align="left"> {{ key }} :</td> <td aligh="left"> {% if info[key] is sequence %} {% for value in info[key] %} {{ value }}<br/> {% endfor %} {% else %} {{ info[key] }} {% endif %} </td> </tr> {%endfor%} </table><br/> |
執行後看效果圖,What The Fuck!!!字串也被分解列印了。
再次修改,判斷為字串,則先列印,然後再去判斷是否為List
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<table width="800px" border="1"> {% for key in info %} <tr> <td width="150px" align="left"> {{ key }} :</td> <td aligh="left"> {% if info[key] is string %} {{ info[key] }} {% elif info[key] is sequence %} {% for value in info[key] %} {{ value }}<br/> {% endfor %} {% else %} {{ info[key] }} {% endif %} </td> </tr> {%endfor%} </table><br/> |
終於乖乖的出來了我們期盼的結果
小結
例項寫完後,目錄結構為
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|____app | |______init__.py | |____forms.py | |____GetWhois.py | |____static | | |____images | | | |____logo.png | |____templates | | |____whois.html | |____views.py |____config.py |____run.py |____tmp |
學習了flask的form基本實現,jinja2的部分語法。
附錄 內建檢查器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
*'''callable(object)''' 物件是否可呼叫 *'''defined(value)''' 物件是否已定義 *'''divisibleby(value, num)''' value是否可以被num整除 *'''escaped(value)''' 是否已轉義 *'''even(value)''' 是否為奇數 *'''iterable(value)''' 是否可以迴圈 *'''lower(value)''' 是否為小寫 *'''none(value)''' 是否為None *'''number(value)''' 是否為數字 *'''odd(value)''' 是否為偶數 *'''sameas(value, other)''' value是否與other為同一個物件例項 *'''sequence(value)''' 是否為序列 *'''string(value)''' 是否是字串 *'''undefined(value)''' 是否未定義 *'''upper(value)''' 是否為大寫 |