使用flask框架搭建一个小型网址查询网站

本网站使用python(flask框架)搭建了一个小型网址查询网站(附详细代码)

实现功能如下:

1、网址信息查询,输入网址,输出网址相关注册信息(此处调用接口实现)

2、类似于数据管理的增加,减少,以及修改界面                                

 

 

本次小项目的重点在于网址查询具体从以下方面考虑:

1、当数据库中已有欲查询网址时,直接显示在网页上。

2、当数据库中没有要查询的网址的时候,调用相关接口返回信息至界面并写入数据库中。

3、当用户网址输入错误(在数据库以及全网中找不到此网站信息)时,使用相似度算法给出用户最可能想要查询的网址。

实现效果如下:

                                                                                 主界面

使用flask框架搭建一个小型网址查询网站_第1张图片

                                                                                 查询界面

使用flask框架搭建一个小型网址查询网站_第2张图片

                                                                          其他三个界面如下

 

使用flask框架搭建一个小型网址查询网站_第3张图片

使用flask框架搭建一个小型网址查询网站_第4张图片

使用flask框架搭建一个小型网址查询网站_第5张图片

在这里网站运行逻辑基本上都在run.py里面写的很详细了,可能要注意的一点(因为调用的接口,返回的是json格式的数据,所以需要按照指定格式读取数据)run.py代码如下(全部文件见压缩包):

from flask import Flask,request,url_for,render_template,redirect
import requests,json,re
import difflib
app=Flask(__name__)
website=[]

def get_equal_rate_1(str1, str2):
   return difflib.SequenceMatcher(None, str1, str2).quick_ratio()
def read_data():
    '''
    此函数读取txt文件中的数据
    数据内容:科学计数法保存的多行两列数据
    输入:txt文件的路径
    输出:小数格式的数组,行列与txt文件中相同
    '''
    with open('back.txt') as fdata:
        while True:
            line=fdata.readline()
            if not line:
                break
            website.append([str(i) for i in line.split(";")])
    #return np.array(data_temp)
read_data()
def findnumber_r(Num):                                        #这里定义一个查找网址的函数,方便复用
    for i in range(len(website)):
        xxy1 = get_equal_rate_1(website[i][1], Num )
        if (xxy1>0.8) :
            print(xxy1)
            return i
    return -1
def findnumber(Num):                                        #这里定义一个查找网址的函数,方便复用
    for i in range(len(website)):
        if website[i][1]==Num:
                return i
    return -1
def save(stu):
    #定义一个保存的函数,以文本的形式把信息保存
    websitefile=open('website.txt','w')
    for i in stu:
        count=0
        for j in i:
            count=count+1
            str=j
            if count==1:
               websitefile.write(str)
            else:
               websitefile.write(";")
               websitefile.write(str)
          #  websitefile.write('\\')
        websitefile.write('\n')
    websitefile.close()

@app.route('/')                                            #这里是根目录,也就是打开链接第一个访问的页面,装饰器
def index():
    save(website)
    return render_template('index.html',website=len(website)+1)   #这里的website=website,等号左边是要传给html文件的变量,右边是上面定义的二维列表
@app.route('/delstu',methods=['GET','POST'])               #这里是删除模块,对应的页面是/delstu
def delstu():
    if request.method=='POST':
        delnumber = request.form.get('delnumber')
        if findnumber(delnumber)==-1:
            return '您输入的网址不存在'
        else:
            del website[findnumber(delnumber)]
            save(website)
            return redirect(url_for('index'))              #如果找到了输入的网址执行删除操作,并重定向到首页
    return render_template('delstu.html',website=website)
@app.route('/addstu',methods=['GET','POST'])               #这里是添加模块
def addstu():
    if request.method=='POST':
        addnumber = request.form.get('addnumber')
        if findnumber(addnumber)!=-1:
            return "您输入的网址已存在"
        else:

            addname = request.form.get('addname')
            adddepartment = request.form.get('adddepartment')
            adddata = request.form.get('adddata')
            addlink = request.form.get('addlink')
            addvelo = request.form.get('addvelo')
            adddetail = request.form.get('adddetail')
            if addname != None and adddepartment and addnumber != None:            #不为空则添加
                website.append([addname, addnumber, adddepartment,adddata,addlink,addvelo,adddetail])
                save(website)
                return redirect(url_for('index'))
    return render_template('addstu.html')                     #添加成功则重定向到首页
@app.route('/altstu',methods=['GET','POST'])                  #这里是修改模块,先要找到要修改的网址,如果找到了进行操作
def altstu():
    if request.method=='POST':
        altnumber = request.form.get('altnumber')
        altdep = request.form.get('altdepartment')
        altname = request.form.get('altname')
        if findnumber(altnumber)==-1:
            return '您输入的网址不存在'
        else:
                if altdep !='':                              #这里的一对单引号里什么都没有,表示如果输入框里为空,不进行修改
                    website[findnumber(altdep)][2]=altdep
                if altname!='':
                    website[findnumber(altname)][0]=altname
                    save(website)
                return render_template('index.html', website=website)


    return render_template('altstu.html')
@app.route('/searchstu',methods=['GET','POST'])
def searchstu():
    if request.method=='POST':
        number = request.form.get('number')

        if findnumber(number)==-1:
            r = requests.get("http://apidata.chinaz.com/CallAPI/Alexa?key=c87319824a3640ef8ef108cb9dc0cf51&domainName=" + number)
            with open('rr.json', 'w') as f:
                f.write(r.text)
                print(r.text)
                f.close()
            with open('rr.json', 'r') as fr:
                data1 = fr.read()
                data = json.loads(data1)
                r = data['Result']
                st = re.split(',', r['ShowDescription'])[0]
                if r['Locale']=="未知" or r['Rank']==-1 :
                    xxss=findnumber_r(number)
                    if xxss==-1:
                        return '亲,这边查询不到您要找的网址,可以重新查询或者换个输入方式哦!'
                    else:
                        return render_template('searchstu.html', find=website[xxss])  # 如果找到了网址,把该网址信息传给html

                else:
                    website.append([r['Locale'], r['Title'], str(r['Rank']), str(r['ShowOnlineSince']), str(r['LinksInCount']),str(r['ShowMedianLoadTime']), st])
                    save(website)
                    find = website[findnumber(number)]
                    return render_template('searchstu.html', find=find)


        else:
            find=website[findnumber(number)]
            return render_template('searchstu.html',find=find)      #如果找到了网址,把该网址信息传给html
       # return redirect(url_for('index'))
    return render_template('searchstu.html',website=website)

if __name__ == '__main__':
    app.run(debug=True)

 

 

 

你可能感兴趣的:(使用flask框架搭建一个小型网址查询网站)