在flask Web服务器上获取内部服务器错误

时间:2016-04-19 22:47:29

标签: python flask raspberry-pi

我是覆盆子pi和python编码的新手。我正在做一个学校项目。我已经找了一些教程和例子,但也许我错过了一些东西。我想构建一个基于Web服务器的gpio控制器。我正在使用烧瓶。为了进入这个,我开始使用这个例子。只需刷新页面即可打开和关闭LED。

所以问题是,我无法在Web服务器端看到响应值。它正在打开和关闭LED。但我想在网上看到这种情况。但我不能。我收到内部服务器错误。我正在给python和html代码。你能帮我解决这个问题。

from flask import Flask
from flask import render_template
import RPi.GPIO as GPIO

app=Flask(__name__)

GPIO.setmode(GPIO.BCM)

GPIO.setup(4, GPIO.OUT)
GPIO.output(4,1)
status=GPIO.HIGH

@app.route('/')
def readPin():
    global status
    global response
    try:
        if status==GPIO.LOW:
            status=GPIO.HIGH
            print('ON')
            response="Pin is high"
        else:
            status=GPIO.LOW
            print('OFF')
            response="Pin is low"
    except:
        response="Error reading pin"

    GPIO.output(4, status)

    templateData= {
        'title' : 'Status of Pin' + status,
        'response' : response
        }

    return render_template('pin.html', **templateData)

if __name__=="__main__":
    app.run('192.168.2.5')

基本上这条线就在我的html页面上。

<h1>{{response}}</h1> 

我认为“回应”没有得到价值。这有什么不对?

2 个答案:

答案 0 :(得分:2)

首先,它有助于在调试模式下运行它:

app.run(debug=True)

这将帮助您追踪任何被抑制的错误。

接下来看一下构建标题字符串的行:

'title' : 'Status of Pin' + status

如果启用调试模式,那么你应该看到一些东西,说int / bool无法隐式转换为str。 (Python不知道如何添加字符串和int / bool)。

为了解决这个问题,你应该明确地将状态转换为字符串:

'title' : 'Status of Pin' + str(status)

或者更好:

'title' : 'Status of Pin: {}'.format(status)

答案 1 :(得分:0)

您的服务器在尝试创建字典时可能会抛出异常,因此templateData值将作为空值发送。

请注意,在此示例中,尝试连接不同类型的2个变量时抛出TypeError。

因此,在尝试组合变量之前,将变量包装在str(status)中会将状态变量强制转换为字符串重新进行。

[root@cloud-ms-1 alan]# cat add.py
a = 'one'
b = 2
print a + b


[root@cloud-ms-1 alan]# python add.py
Traceback (most recent call last):
  File "add.py", line 6, in <module>
    print a + b
TypeError: cannot concatenate 'str' and 'int' objects


[root@cloud-ms-1 alan]# cat add.py
a = 'one'
b = str(2)
print a + b


[root@cloud-ms-1 alan]# python add.py
one2