2016-07-30 3 views
0

Я новичок в разработке приложений Flask. Я хочу сделать приложение Flask, которое получает данные от пользователя. После успешной регистрации появится новая страница с указанием введенных данных. Приложение построено с использованием форм HTML, а не с помощью WTF.Флажок HTML-формы-UnboundLocalError

Ниже приводится код app.py

from flask import Flask, render_template, request 

app = Flask(__name__) 

@app.route('/register',methods = ['POST', 'GET']) 
def user(): 
    if request.method == 'POST': 
     result = request.form 
     name = result['name'] 
     phoneno = result['phoneno'] 
     email = result['email'] 
     password = result['password'] 
     if name or phoneno or email or password is not None: 
      print name,phoneno,email,password 
    return render_template("register.html",result=result) 

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

Это является HTML страница register.html

<html> 
    <body> 

    <form action = "/success" method = "POST"> 
    <p>Name <input type = "text" name = "name" /></p> 
    <p>Phone no <input type = "text" name = "phoneno" /></p> 
    <p>Email <input type = "text" name = "email" /></p> 
    <p>Password <input type ="text" name = "password" /></p> 
    <p><input type = "submit" value = "submit" /></p> 
    </form> 

</body> 
</html> 

Что теперь я получаю ошибка

Full Traceback 
**UnboundLocalError** 
UnboundLocalError: local variable 'result' referenced before assignment. 

File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 2000,  in __call__ 
return self.wsgi_app(environ, start_response) 
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1991, in wsgi_app 
response = self.make_response(self.handle_exception(e)) 
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1567, in handle_exception 
reraise(exc_type, exc_value, tb) 
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1988, in wsgi_app 
response = self.full_dispatch_request() 
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1641, in full_dispatch_request 
rv = self.handle_user_exception(e) 
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1544, in handle_user_exception 
reraise(exc_type, exc_value, tb) 
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1639, in full_dispatch_request 
rv = self.dispatch_request() 
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1625, in dispatch_request 
return self.view_functions[rule.endpoint](**req.view_args) 
File "/home/protocol/PycharmProjects/tut/app.py", line 17, in user 
return render_template("register.html",result=result) 
UnboundLocalError: local variable 'result' referenced before assignment 

Я попытался напечатать значения. Но ничего не отображается в консоли, я не мог исправить эту ошибку. Спасибо заранее.

+0

Пожалуйста, отредактируйте этот вопрос, чтобы включить полную трассировку. – dirn

+0

@dirn Я добавил полный трафик. – PROTOCOL

+0

Это заставляет меня поверить, что ваш отступ здесь не соответствует отступу в вашем фактическом файле. – dirn

ответ

1

result существует только тогда, когда метод request является POST, поэтому, если метод запроса был GET (который является запрос по умолчанию один), то есть, когда страница запрашивается перед отправкой формы данных пользователя, то result не будет существующим , следовательно, сообщение об ошибке. Кроме того, вы должны визуализировать result объект в другой шаблон, например user.html:

@app.route('/register',methods = ['POST', 'GET']) 
def user(): 
    if request.method == 'POST': 
     result = request.form 
     name = result['name'] 
     phoneno = result['phoneno'] 
     email = result['email'] 
     password = result['password'] 
     if name or phoneno or email or password is not None: 
      print name,phoneno,email,password 
      return render_template("user.html",result=result) 
    return render_template("register.html") 

Другое дело, если данная функция зрения для register.html формы, то вам необходимо изменить в form блоке, из:

<form action = "/success" method = "POST"> 

в

<form action = "/register" method = "POST"> 
+0

@roy Спасибо за поддержку :) – PROTOCOL

+0

Iron Fist Спасибо большое. Помогает мне. Теперь это сработало. – PROTOCOL

+0

@Protocol ... конечно :) –

0

Попробуйте это:
app.py

from flask import Flask, render_template, request 

app = Flask(__name__) 

@app.route('/') 
def form(): 
    return render_template('register.html') 


@app.route('/success',methods = ['POST', 'GET']) 
def user(): 
    if request.method == 'POST': 
     results = request.form 
    return render_template('new.html',results=results) 

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

new.html

{% for k,v in results.iteritems() %} 
    <p>{{v}}</p> 
{% endfor %} 

register.html такой же, как ваша.
Вам не хватает шаблона html для отображения входных данных формы, файл new.html отобразит значения, вводимые вами в вашей форме.

Смежные вопросы