2017-08-23 3 views
-1

Ich verwende Flask-Security mit benutzerdefinierten Vorlagen für meine Anmeldeformulare. Ich habe mein Formular definiert, aber aus welchem ​​Grund auch immer wird das Formular nicht an das Template übergeben. HierFormular nicht definiert mit Flask-Security

ist die Form Code

class LoginForm(FlaskForm): 
    email = TextField('Email Address', [ 
      Required(message='Forgot your email address?')]) 
    password = PasswordField('Password', [ 
      Required(message='Must provide a password. ;-)')]) 

Hier wird der Template-Code

<form method="POST" action="." accept-charset="UTF-8" role="form"> 
    {{ form.csrf_token }} {{ render_field(form.email, placeholder="Your Email Address", autofocus="") }} {{ render_field(form.password, placeholder="Password") }} 
     <div> 
      <label> 
         <input type="checkbox" name="remember" value="1"> Remember Me 
        </label> 
         <a role="button" href="">Forgot your password?</a><span class="clearfix"></span> 
     </div> 
        <button type="submit" name="submit">Sign in</button>   
</form> 

Hier ist der Code für den Login

@mod_auth.route('/signin/', methods=['GET', 'POST']) 
def signin(): 
    # If sign in form is submitted 
    form = LoginForm(request.form) 
    # Verify the sign in form 
    if form.validate_on_submit(): 
     for user in User.objects(email=form.email.data): 
      if user and user.password == form.password.data: 
       login_user(user) 
      if not is_safe_url(next): 
       flash('Logging you in') 
       return flask.abort(400) 
      return redirect(next or ('/') 
     elif user: 
      flash('Wrong password') 
     else: 
      flash('could not find username') 
    return render_template("security/login_user.html", form=form) 

Der Code funktioniert, wenn ich die Zeile entfernen in der Konfig

app.config['SECURITY_LOGIN_URL'] = '/auth/signin/' 

Aber wenn diese Linie gibt es wirft es diesen Fehler

Traceback (most recent call last): 
File "/usr/lib/python3.6/site-packages/flask/app.py", line 1997, in __call__ 
return self.wsgi_app(environ, start_response) 
File "/usr/lib/python3.6/site-packages/flask/app.py", line 1985, in wsgi_app 
response = self.handle_exception(e) 
File "/usr/lib/python3.6/site-packages/flask/app.py", line 1540, in handle_exception 
reraise(exc_type, exc_value, tb) 
File "/usr/lib/python3.6/site-packages/flask/_compat.py", line 33, in reraise 
raise value 
File "/usr/lib/python3.6/site-packages/flask/app.py", line 1982, in wsgi_app 
response = self.full_dispatch_request() 
File "/usr/lib/python3.6/site-packages/flask/app.py", line 1614, in full_dispatch_request 
rv = self.handle_user_exception(e) 
File "/usr/lib/python3.6/site-packages/flask/app.py", line 1517, in handle_user_exception 
reraise(exc_type, exc_value, tb) 
File "/usr/lib/python3.6/site-packages/flask/_compat.py", line 33, in reraise 
raise value 
File "/usr/lib/python3.6/site-packages/flask/app.py", line 1612, in full_dispatch_request 
rv = self.dispatch_request() 
File "/usr/lib/python3.6/site-packages/flask/app.py", line 1598, in dispatch_request 
return self.view_functions[rule.endpoint](**req.view_args) 
File "/usr/lib/python3.6/site-packages/flask_security/decorators.py", line 230, in wrapper 
return f(*args, **kwargs) 
File "/usr/lib/python3.6/site-packages/flask_security/views.py", line 89, in login 
**_ctx('login')) 
File "/usr/lib/python3.6/site-packages/flask_security/core.py", line 528, in render_template 
return render_template(*args, **kwargs) 
File "/usr/lib/python3.6/site-packages/flask/templating.py", line 134, in render_template 
context, ctx.app) 
File "/usr/lib/python3.6/site-packages/flask/templating.py", line 116, in _render 
rv = template.render(context) 
File "/usr/lib/python3.6/site-packages/jinja2/asyncsupport.py", line 76, in render 
return original_render(self, *args, **kwargs) 
File "/usr/lib/python3.6/site-packages/jinja2/environment.py", line 1008, in render 
return self.environment.handle_exception(exc_info, True) 
File "/usr/lib/python3.6/site-packages/jinja2/environment.py", line 780, in handle_exception 
reraise(exc_type, exc_value, tb) 
File "/usr/lib/python3.6/site-packages/jinja2/_compat.py", line 37, in reraise 
raise value.with_traceback(tb) 
File "/home/kenton/Programming/bridal/bridal-website/becomeOne/app/templates/security/login_user.html", line 1, in top-level template code 
{% extends "base.html" %} {% block content %} 
File "/home/kenton/Programming/bridal/bridal-website/becomeOne/app/templates/base.html", line 1, in top-level template code 
{% block doc -%} 
File "/home/kenton/Programming/bridal/bridal-website/becomeOne/app/templates/base.html", line 4, in block "doc" 
{%- block html %} 
File "/home/kenton/Programming/bridal/bridal-website/becomeOne/app/templates/base.html", line 43, in block "html" 
{% block body -%} 
File "/home/kenton/Programming/bridal/bridal-website/becomeOne/app/templates/base.html", line 48, in block "body" 
{% block content -%} {%- endblock content %} {% block scripts %} 
File "/home/kenton/Programming/bridal/bridal-website/becomeOne/app/templates/security/login_user.html", line 22, in block "content" 
{% endif %} {% endwith %} {% if form.errors %} 
File "/usr/lib/python3.6/site-packages/jinja2/environment.py", line 430, in getattr 
return getattr(obj, attribute) 
jinja2.exceptions.UndefinedError: 'form' is undefined 

Irgendwelche Gedanken oder gar wäre toll helfen! Vielen Dank im Voraus.

+0

Sie verwenden Flask-Security, warum beschäftigen Sie sich selbst mit Login? – stamaimer

+0

@stamaimer Nun, ich sah, dass die Sicherheit Flaschen Login für Logins verwendet und ich habe nie etwas über die Anmeldung zu sehen, so ging ich zu Flashen Login und Setup etwas ähnelt ihrer Dokumentation. Wie sollte ich die Logins machen? – Kenton

+0

Haben Sie schon mal den [quick start] (https://pythonhosted.org/Flask-Security/quickstart.html) von Flask-Security durchsucht? – stamaimer

Antwort

-1

Jinja2 wirft den Fehler:

jinja2.exceptions.UndefinedError: 'form' is undefined 

Der Template-Code oben verwendet form, die es nicht about.You weiß nicht es auf die Vorlage liefert, die es verwendet. Sie müssen die form für die Vorlage übergeben, die es verwendet.

+0

Downtoting sollte erklärt werden. – 0decimal0

+0

Komm schon! Downvoter. Es ist keine gesunde Übung, ohne zu erklären, ohne zu erklären. – 0decimal0

Verwandte Themen