python实现whois查询_flask查询whois信息实例

Step 1 新建查询whois信息的form类

在forms.py中添加如下代码:

# -*- 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文件,代码如下:

GetWhois

Whois信息查询

{{ form.hidden_tag() }}

{{form.myDomain(size=80)}}

{% for key in info %}

{{ key }} :{{ info[key] }}

{%endfor%}

这里只为做实例,所以没有设置继承模板,如果是一个整体的项目,建议通过继承实现,保持风格一致。

实例通过whois模块得到相关信息,返回的结果是一个字典,如图所示

所以用了以下jinja2语句将信息输出到网页上

{% for key in info %}

{{ key }} :{{ info[key] }}

{%endfor%}

Step 3 Whois函数实现

在views.py中添加实现代码

@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中实现,具体为

#!/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修改成

{% for key in info %}

{{ key }} :

{% if info[key] is sequence %}

{% for value in info[key] %}

{{ value }}

{% endfor %}

{% else %}

{{ info[key] }}

{% endif %}

{%endfor%}

执行后看效果图,What The Fuck!!!字符串也被分解打印了。

再次修改,判断为字符串,则先打印,然后再去判断是否为List

{% for key in info %}

{{ key }} :

{% if info[key] is string %}

{{ info[key] }}

{% elif info[key] is sequence %}

{% for value in info[key] %}

{{ value }}

{% endfor %}

{% else %}

{{ info[key] }}

{% endif %}

{%endfor%}

终于乖乖的出来了我们期盼的结果

小结

实例写完后,目录结构为

|____app

| |______init__.py

| |____forms.py

| |____GetWhois.py

| |____static

| | |____images

| | | |____logo.png

| |____templates

| | |____whois.html

| |____views.py

|____config.py

|____run.py

|____tmp

学习了flask的form基本实现,jinja2的部分语法。

附录 内建检查器:

*'''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)'''

是否为大写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值