首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试清除应用程序对象中的对象时出错:'app.forms.RegistrationForm OpenID‘没有属性'openid’

尝试清除应用程序对象中的对象时出错:'app.forms.RegistrationForm OpenID‘没有属性'openid’
EN

Stack Overflow用户
提问于 2017-05-18 03:31:15
回答 1查看 108关注 0票数 0

我正在尝试摆脱OpenID,并使用标准用户名/密码登录,但在尝试转到我的索引/登录页面时,一直收到以下OpenID错误。

在Flask中发现错误

代码语言:javascript
复制
UndefinedError: 'app.forms.RegistrationForm object' has no attribute 'openid'

来自jinja的调试器出错

代码语言:javascript
复制
jinja2.exceptions.UndefinedError
UndefinedError: 'app.forms.RegistrationForm object' has no attribute 'openid'
Traceback (most recent call last)

File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask/app.py", line 1997, in __call__

return self.wsgi_app(environ, start_response)

File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask/app.py", line 1985, in wsgi_app

response = self.handle_exception(e)

File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask/app.py", line 1540, in handle_exception

reraise(exc_type, exc_value, tb)

File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask/app.py", line 1982, in wsgi_app

response = self.full_dispatch_request()

File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask/app.py", line 1614, in full_dispatch_request

rv = self.handle_user_exception(e)

File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask/app.py", line 1517, in handle_user_exception

reraise(exc_type, exc_value, tb)

File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask/app.py", line 1612, in full_dispatch_request

rv = self.dispatch_request()

File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask/app.py", line 1598, in dispatch_request

return self.view_functions[rule.endpoint](**req.view_args)

File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask_openid.py", line 500, in decorated

return f(*args, **kwargs)

File "/home/jsnyder10/Documents/45/app/views.py", line 104, in login

form=form)

File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask/templating.py", line 134, in render_template

context, ctx.app)

File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask/templating.py", line 116, in _render

rv = template.render(context)

File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/jinja2/environment.py", line 1008, in render

return self.environment.handle_exception(exc_info, True)

File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/jinja2/environment.py", line 780, in handle_exception

reraise(exc_type, exc_value, tb)

File "/home/jsnyder10/Documents/45/app/templates/login.html", line 2, in top-level template code

{% extends "base.html" %}

File "/home/jsnyder10/Documents/45/app/templates/base.html", line 66, in top-level template code

{% block content %}{% endblock %}

File "/home/jsnyder10/Documents/45/app/templates/login.html", line 39, in block "content"

File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/jinja2/environment.py", line 430, in getattr

return getattr(obj, attribute)

UndefinedError: 'app.forms.RegistrationForm object' has no attribute 'openid'

调试器在您的WSGI应用程序中捕获到异常。现在,您可以查看导致错误的回溯。

以下是login.html的代码

代码语言:javascript
复制
<!-- extend base layout -->
{% extends "base.html" %}

{% include 'flash.html' %}
<div class="well">
    <h3>{{ _('Please Sign In') }}</h3>
    <form class="form" action="" method="post" name="login">
        {{ form.hidden_tag() }}
        <label class="control-label">{{ _('Enter your UserID here:') }}</label>
            <div class="controls">
                {{ form.username(size=80, class="span4") }}
                {% for error in form.username.errors %}
                    <span class="help-inline">[{{ error }}]</span><br>
                {% endfor %}
            </div>
</div>
{% endblock %}

index.html的代码

代码语言:javascript
复制
<!-- extend base layout -->
{% extends "base.html" %}

{% block content %}
<h1>{{ _('Hi, %(nickname)s!', nickname=g.user.nickname) }}</h1>
{% include 'flash.html' %}
<div class="well">
    <form class="form-horizontal" action="" method="post" name="post">
        {{ form.hidden_tag() }}
        <div class="control-group{% if form.post.errors %} error{% endif %}">
            <label class="control-label" for="post">{{ _('Say something:') }}</label>
            <div class="controls">
                {{ form.post(size=30, maxlength=140) }}
                {% for error in form.post.errors %}
                    <span class="help-inline">[{{ error }}]</span><br>
                {% endfor %}
            </div>
        </div>
        <div class="control-group">
            <div class="controls">
                <input class="btn btn-primary" type="submit" value="{{ _('Post!') }}">
            </div>
        </div>
    </form>
</div>
{% for post in posts.items %}
    {% include 'post.html' %}
{% endfor %}
<ul class="pager">
    {% if posts.has_prev %}
    <li class="previous"><a href="{{ url_for('index', page=posts.prev_num) }}">{{ _('Newer posts') }}</a></li>
    {% else %}
    <li class="previous disabled"><a href="#">{{ _('Newer posts') }}</a></li>
    {% endif %}
    {% if posts.has_next %}
    <li class="next"><a href="{{ url_for('index', page=posts.next_num) }}">{{ _('Older posts') }}</a></li>
    {% else %}
    <li class="next disabled"><a href="#">{{ _('Older posts') }}</a></li>
    {% endif %}
</ul>
{% endblock %}

views.py的代码

代码语言:javascript
复制
from flask import render_template, flash, redirect, session, url_for, request, \
g, jsonify
from flask_login import login_user, logout_user, current_user,     login_required
from flask_sqlalchemy import get_debug_queries
from flask_babel import gettext
from datetime import datetime
from guess_language import guessLanguage
from app import app, db, lm, oid, babel
from .forms import LoginForm, EditForm, PostForm, SearchForm, RegistrationForm
from .models import User, Post
from .emails import follower_notification
from .translate import microsoft_translate
from config import POSTS_PER_PAGE, MAX_SEARCH_RESULTS, LANGUAGES, \
DATABASE_QUERY_TIMEOUT

@app.route('/', methods=['GET', 'POST'])
@app.route('/index', methods=['GET', 'POST'])
@app.route('/index/<int:page>', methods=['GET', 'POST'])
@login_required
def index(page=1):
form = PostForm()
if form.validate_on_submit():
    language = guessLanguage(form.post.data)
    if language == 'UNKNOWN' or len(language) > 5:
        language = ''
    post = Post(body=form.post.data, timestamp=datetime.utcnow(),
                author=g.user, language=language)
    db.session.add(post)
    db.session.commit()
    flash(gettext('Your post is now live!'))
    return redirect(url_for('index'))
posts = g.user.followed_posts().paginate(page, POSTS_PER_PAGE, False)
return render_template('index.html',
                       title='Home',
                       form=form,
                       posts=posts)

@app.route('/login', methods=['GET', 'POST'])
@oid.loginhandler
def login():
if g.user is not None and g.user.is_authenticated:
    return redirect(url_for('index'))
form = RegistrationForm()
if form.validate_on_submit():
    session['remember_me'] = form.remember_me.data
return render_template('login.html',
                       title='Sign In',
                       form=form)

有人能解释一下app.forms.RegistrationForm到底在做什么吗?它不在我的代码中,即使我在python中运行我的代码,我也不能让app.forms做任何事情。

EN

回答 1

Stack Overflow用户

发布于 2017-05-18 04:55:37

我想通了。在我的login.html模板中,它有引用它的代码,即使在html中使用括号禁用了它,Flask仍然继续读取它,并抛出了一个错误。

给自己的教训是,Flask不会忽略代码,即使去掉了括号,如果忽略的html代码中有错误,Flask也会崩溃。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44033320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档