当前位置:   article > 正文

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

python flask搭建查询报表网站

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

实现功能如下:

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

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

 

 

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

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

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

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

实现效果如下:

                                                                                 主界面

                                                                                 查询界面

                                                                          其他三个界面如下

 

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

  1. from flask import Flask,request,url_for,render_template,redirect
  2. import requests,json,re
  3. import difflib
  4. app=Flask(__name__)
  5. website=[]
  6. def get_equal_rate_1(str1, str2):
  7. return difflib.SequenceMatcher(None, str1, str2).quick_ratio()
  8. def read_data():
  9. '''
  10. 此函数读取txt文件中的数据
  11. 数据内容:科学计数法保存的多行两列数据
  12. 输入:txt文件的路径
  13. 输出:小数格式的数组,行列与txt文件中相同
  14. '''
  15. with open('back.txt') as fdata:
  16. while True:
  17. line=fdata.readline()
  18. if not line:
  19. break
  20. website.append([str(i) for i in line.split(";")])
  21. #return np.array(data_temp)
  22. read_data()
  23. def findnumber_r(Num): #这里定义一个查找网址的函数,方便复用
  24. for i in range(len(website)):
  25. xxy1 = get_equal_rate_1(website[i][1], Num )
  26. if (xxy1>0.8) :
  27. print(xxy1)
  28. return i
  29. return -1
  30. def findnumber(Num): #这里定义一个查找网址的函数,方便复用
  31. for i in range(len(website)):
  32. if website[i][1]==Num:
  33. return i
  34. return -1
  35. def save(stu):
  36. #定义一个保存的函数,以文本的形式把信息保存
  37. websitefile=open('website.txt','w')
  38. for i in stu:
  39. count=0
  40. for j in i:
  41. count=count+1
  42. str=j
  43. if count==1:
  44. websitefile.write(str)
  45. else:
  46. websitefile.write(";")
  47. websitefile.write(str)
  48. # websitefile.write('\\')
  49. websitefile.write('\n')
  50. websitefile.close()
  51. @app.route('/') #这里是根目录,也就是打开链接第一个访问的页面,装饰器
  52. def index():
  53. save(website)
  54. return render_template('index.html',website=len(website)+1) #这里的website=website,等号左边是要传给html文件的变量,右边是上面定义的二维列表
  55. @app.route('/delstu',methods=['GET','POST']) #这里是删除模块,对应的页面是/delstu
  56. def delstu():
  57. if request.method=='POST':
  58. delnumber = request.form.get('delnumber')
  59. if findnumber(delnumber)==-1:
  60. return '您输入的网址不存在'
  61. else:
  62. del website[findnumber(delnumber)]
  63. save(website)
  64. return redirect(url_for('index')) #如果找到了输入的网址执行删除操作,并重定向到首页
  65. return render_template('delstu.html',website=website)
  66. @app.route('/addstu',methods=['GET','POST']) #这里是添加模块
  67. def addstu():
  68. if request.method=='POST':
  69. addnumber = request.form.get('addnumber')
  70. if findnumber(addnumber)!=-1:
  71. return "您输入的网址已存在"
  72. else:
  73. addname = request.form.get('addname')
  74. adddepartment = request.form.get('adddepartment')
  75. adddata = request.form.get('adddata')
  76. addlink = request.form.get('addlink')
  77. addvelo = request.form.get('addvelo')
  78. adddetail = request.form.get('adddetail')
  79. if addname != None and adddepartment and addnumber != None: #不为空则添加
  80. website.append([addname, addnumber, adddepartment,adddata,addlink,addvelo,adddetail])
  81. save(website)
  82. return redirect(url_for('index'))
  83. return render_template('addstu.html') #添加成功则重定向到首页
  84. @app.route('/altstu',methods=['GET','POST']) #这里是修改模块,先要找到要修改的网址,如果找到了进行操作
  85. def altstu():
  86. if request.method=='POST':
  87. altnumber = request.form.get('altnumber')
  88. altdep = request.form.get('altdepartment')
  89. altname = request.form.get('altname')
  90. if findnumber(altnumber)==-1:
  91. return '您输入的网址不存在'
  92. else:
  93. if altdep !='': #这里的一对单引号里什么都没有,表示如果输入框里为空,不进行修改
  94. website[findnumber(altdep)][2]=altdep
  95. if altname!='':
  96. website[findnumber(altname)][0]=altname
  97. save(website)
  98. return render_template('index.html', website=website)
  99. return render_template('altstu.html')
  100. @app.route('/searchstu',methods=['GET','POST'])
  101. def searchstu():
  102. if request.method=='POST':
  103. number = request.form.get('number')
  104. if findnumber(number)==-1:
  105. r = requests.get("http://apidata.chinaz.com/CallAPI/Alexa?key=c87319824a3640ef8ef108cb9dc0cf51&domainName=" + number)
  106. with open('rr.json', 'w') as f:
  107. f.write(r.text)
  108. print(r.text)
  109. f.close()
  110. with open('rr.json', 'r') as fr:
  111. data1 = fr.read()
  112. data = json.loads(data1)
  113. r = data['Result']
  114. st = re.split(',', r['ShowDescription'])[0]
  115. if r['Locale']=="未知" or r['Rank']==-1 :
  116. xxss=findnumber_r(number)
  117. if xxss==-1:
  118. return '亲,这边查询不到您要找的网址,可以重新查询或者换个输入方式哦!'
  119. else:
  120. return render_template('searchstu.html', find=website[xxss]) # 如果找到了网址,把该网址信息传给html
  121. else:
  122. website.append([r['Locale'], r['Title'], str(r['Rank']), str(r['ShowOnlineSince']), str(r['LinksInCount']),str(r['ShowMedianLoadTime']), st])
  123. save(website)
  124. find = website[findnumber(number)]
  125. return render_template('searchstu.html', find=find)
  126. else:
  127. find=website[findnumber(number)]
  128. return render_template('searchstu.html',find=find) #如果找到了网址,把该网址信息传给html
  129. # return redirect(url_for('index'))
  130. return render_template('searchstu.html',website=website)
  131. if __name__ == '__main__':
  132. app.run(debug=True)

 

 

 

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号