IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    flask查询whois信息实例

    b1uehat发表于 2016-06-23 16:02:57
    love 0

    flask基础实现不再赘述,不了解的同学可以通过官方文档学习
    http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-iii-web-forms

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

    <!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模块得到相关信息,返回的结果是一个字典,如图所示

    clipboard.png

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

    <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中添加实现代码

    @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修改成

        <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

        <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/>

    终于乖乖的出来了我们期盼的结果
    图片描述

    小结

    实例写完后,目录结构为

    |____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)''' 
    是否为大写 
    


沪ICP备19023445号-2号
友情链接