2013-12-10 15 views
5

सेटअप करने के लिए अजगर और बोतल के साथ एक प्रवेश पृष्ठ की कोशिश कर के साथ काम करने और एक प्राप्त करने में त्रुटि: (लाइन 33 @login_required साथ है)अजगर बोतल wraps

Traceback (most recent call last): 
    File "routes.py", line 33, in <module> 
    @login_required 
    File "/home/pi/FlaskTutorial/local/lib/python2.7/site-packages/flask/app.py", line 1013, in decorator 
    self.add_url_rule(rule, endpoint, f, **options) 
    File "/home/pi/FlaskTutorial/local/lib/python2.7/site-packages/flask/app.py", line 62, in wrapper_func 
    return f(self, *args, **kwargs) 
    File "/home/pi/FlaskTutorial/local/lib/python2.7/site-packages/flask/app.py", line 942, in add_url_rule 
    endpoint = _endpoint_from_view_func(view_func) 
    File "/home/pi/FlaskTutorial/local/lib/python2.7/site-packages/flask/helpers.py", line 60, in _endpoint_from_view_func 
    assert view_func is not None, 'expected view func if endpoint ' \ 
AssertionError: expected view func if endpoint is not provided. 

यहाँ, कोड मैं का उपयोग कर रहा है मैं समस्या नहीं लग रही है ... कोई विचार?

from flask import * 
from functools import wraps 

app = Flask(__name__) 

app.secret_key = 'secret key' #Use a random key generator 

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

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

def login_required(test): 
    @wraps(test) 
    def wrap(*args, **kwargs): 
     if 'logged_in' in session: 
      return test(*args, **kwargs) 
     else: 
      flash('You need to login first.') 
      return redirect(url_for('log')) 
     return wrap 

@app.route('/logout') 
def logout(): 
    session.pop('logged_in', None) 
    flash('You were logged out') 
    return redirect (url_for('log')) 

@app.route('/hello') 
@login_required 
def hello(): 
    return render_template('hello.html') 

@app.route('/log', methods=['GET', 'POST']) 
def log(): 
    error = None 
    if request.method =='POST': 
     if request.form['username'] != 'admin' or request.form['password'] != 'admin': 
      error = 'Invaled Credentials. Please try again.' 
     else: 
      session['logged_in'] = True 
      return redirect(url_for('hello')) 
    return render_template('log.html', error=error) 

if __name__ == '__main__': 
    app.run(host='0.0.0.0', port=9000, debug=True) 

उत्तर

11

अब आप अपने डेकोरेटर रिटर्न एक None मूल्य बहुत दूर return wrap लाइन इंडेंट,। @login_required लाइन के लिए

def login_required(test): 
    @wraps(test) 
    def wrap(*args, **kwargs): 
     if 'logged_in' in session: 
      return test(*args, **kwargs) 
     else: 
      flash('You need to login first.') 
      return redirect(url_for('log')) 
    return wrap 

अपवाद अंक क्योंकि अगले डेकोरेटर, @app.route('/hello') अपवाद के रूप में यह @login_required के उत्पादन के लिए लागू किया जाता है फेंकता है: अंतिम पंक्ति अनइंडेंट। AssertionError अपवाद स्पष्ट रूप से फेंक दिया गया है क्योंकि मार्ग सजावट को समारोह के लिए None मान पारित किया गया था।

+0

धन्यवाद, आप इतने लंबे समय तक देखते हैं कि आप जंगल के माध्यम से जंगल नहीं देख सकते ... धन्यवाद फिर से – user2740536

+0

धन्यवाद एक ही मुद्दे में भागने के लिए धन्यवाद। –

संबंधित मुद्दे