我在常规py文件中有一些脚本来检查所需的URL是否已连接。
import urllib2
import time
global xUrl
Url = 'http://stackoverflow.com/'
def checkNetwork():
try:
response=urllib2.urlopen(Url,timeout=1)
return True
except urllib2.URLError as err: pass
return False
while 1:
if checkNetwork() == 1:
print "Connected to", Url
else:
print "Cannot Connected to", Url
time.sleep(5)
pass
对于在烧瓶中实施,我确实尝试了这个:
@app.route('/status/')
@auth.login_required
def checkNetwork():
user = auth.get_logged_in_user()
optiondetails = Optionplatform.select().where(Optionplatform.user==user.id)
xUrl = Optionplatform.remoteserver #i edited the posted questions.
try:
response = urllib2.urlopen(xUrl,timeout=1)
status = "Connected to " + xUrl
return render_template('checkNetwork.html', status)
except urllib2.URLError as err:
status = "NOT Connected to " + xUrl
return render_template('checkNetwork.html', status)
return render_template('checkNetwork.html')
和模板,
<html>
<head> </head>
<body>
{% block content_details %}
<p>{{ status }} </p>
{% endblock %}
</body>
</html>
但是得到了这个错误: 问题是,如何在烧瓶中实施?应该使用Flask中的哪些API?而不是urllib32打开一些URI并检查,连接或不连接到远程服务器。
感谢您的任何建议。
根据米格尔的回答/评论编辑: 这里的模型。
class Optionplatform(db.Model):
user = ForeignKeyField(User, related_name='user_option')
remoteserver = TextField()
token = TextField()
根据@miguel的建议,在我写之前就像@miguel说的那样:
xUrl = optiondetails.remoteserver
但稍后会出现错误消息,表明在models.py中没有“remoteserver”。这里的错误消息“AttributeError:'SelectQuery'对象没有属性'remoteserver'”。
所以我改为:
xUrl = Optionplatform.remoteserver
错误消息在第一张图片中。
答案 0 :(得分:0)
您发送给xUrl
的{{1}}参数必须是字符串(或urllib2
对象,但这似乎不是您的意思无论如何都想要。)
从堆栈跟踪中看来,xUrl是来自Flask-Peewee的urllib2.Request
对象。
您没有显示模型的定义,但我相信这是错误的代码:
TextField
我想你想要:
optiondetails = Option.select().where(Option.user==user.id)
xUrl = Optionp.remoteserver
或者接近,你知道你的模特而我不知道,所以你必须适应它。重要的是你要确保放在xUrl中的是带有URL的字符串。
答案 1 :(得分:0)
这是一种更简单的方法,使用优秀的requests
library
import requests
@app.route('/status/')
@auth.login_required
def checkNetwork():
user = auth.get_logged_in_user()
optiondetails = Optionplatform.select().where(Optionplatform.user==user.id)
xUrl = optiondetails.remoteserver #i edited the posted questions.
status = None
try:
r = requests.get(xUrl)
except requests.exceptions.ConnectionError:
status = "Network Error while connecting to {}".format(xUrl)
if r and str(r.status_code)[0] not in ('2','3'):
status = "URL {} returned {}".format(xUrl, status_code)
else:
status = "Connection established to {}".format(xUrl)
return render_template('checkNetwork.html', status=status)