本网站使用python(flask框架)搭建了一个小型网址查询网站(附详细代码)
实现功能如下:
1、网址信息查询,输入网址,输出网址相关注册信息(此处调用接口实现)
2、类似于数据管理的增加,减少,以及修改界面
本次小项目的重点在于网址查询具体从以下方面考虑:
1、当数据库中已有欲查询网址时,直接显示在网页上。
2、当数据库中没有要查询的网址的时候,调用相关接口返回信息至界面并写入数据库中。
3、当用户网址输入错误(在数据库以及全网中找不到此网站信息)时,使用相似度算法给出用户最可能想要查询的网址。
实现效果如下:
主界面
查询界面
其他三个界面如下:
在这里网站运行逻辑基本上都在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)