POST Methode wird von Flask ignoriert
Verfasst: Mittwoch 15. August 2018, 09:05
Hallo Zusammen
Ich bin relativ neu in Python und gerade daran mich in Flask einzuarbeiten. Ich betreibe Python als
Hobby und zum Ausgleich, ich bin aber gelernter Informatiker mit über zehn Jahren Erfahrung.
Aktuell versuche ich ein Benutzerlogin und Registrierung zu implementieren, scheitere aber im
Moment an einem vermeintlich einfachen Formular! Aus irgend einem Grund scheint
Flask die POST Methode zu ignorieren und übermittelt und benutzt bei sämtlichen Requests
die GET Methode. Die ganze Authentifizierung habe ich über flask Blueprint implementiert.
Wenn ich das Formular abschicke wird folgendes log generiert:
auch wenn ich dem Submit tag im html das Attribut method = POST mitgebe, wird dies von
flask ignoriert?!?
Da ich noch in meinem Lernprozess stecke, gehe ich von einem Überlegungsfehler aus und
hoffe ihr könnt mir auf die Sprünge helfen.
Hier der relevante Code:
app/__init__.py
app/auth/__init__.py
app/auth/forms.py
app/auth/views.py
app/templates/auth/register.html
Ich bin relativ neu in Python und gerade daran mich in Flask einzuarbeiten. Ich betreibe Python als
Hobby und zum Ausgleich, ich bin aber gelernter Informatiker mit über zehn Jahren Erfahrung.
Aktuell versuche ich ein Benutzerlogin und Registrierung zu implementieren, scheitere aber im
Moment an einem vermeintlich einfachen Formular! Aus irgend einem Grund scheint
Flask die POST Methode zu ignorieren und übermittelt und benutzt bei sämtlichen Requests
die GET Methode. Die ganze Authentifizierung habe ich über flask Blueprint implementiert.
Wenn ich das Formular abschicke wird folgendes log generiert:
Code: Alles auswählen
127.0.0.1 - - [15/Aug/2018 09:54:46] "GET /auth/register?username=Testname&email=test%40test.ch&password=test&confirm=test&submit=Login HTTP/1.1" 200 –
flask ignoriert?!?
Da ich noch in meinem Lernprozess stecke, gehe ich von einem Überlegungsfehler aus und
hoffe ihr könnt mir auf die Sprünge helfen.
Hier der relevante Code:
app/__init__.py
Code: Alles auswählen
import os
from flask import Flask
from flask_bootstrap import Bootstrap
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from config import config
bootstrap = Bootstrap()
db = SQLAlchemy()
def create_app(config_name):
app = Flask(__name__)
app.config.from_object(config[config_name])
config[config_name].init_app(app)
bootstrap.init_app(app)
db.init_app(app)
migrate = Migrate(app, db)
from .main import main as main_blueprint
app.register_blueprint(main_blueprint)
from .auth import auth as auth_blueprint
app.register_blueprint(auth_blueprint, url_prefix='/auth')
return app
Code: Alles auswählen
from flask import Blueprint
auth = Blueprint('auth', __name__)
from . import views
app/auth/forms.py
Code: Alles auswählen
from wtforms import Form, BooleanField, StringField, PasswordField, SubmitField, validators
class RegistrationForm(Form):
username = StringField('Usename', [validators.Length(min=4, max=25)])
email = StringField('Email Address', [validators.Length(min=6, max=35)])
password = PasswordField('New Password', [
validators.DataRequired(),
validators.EqualTo('confirm', message='Passwords must match')
])
confirm = PasswordField('Repeat Password')
accept_tos = BooleanField('I accept the TOS', [validators.DataRequired()])
submit = SubmitField('Login')
Code: Alles auswählen
from flask import render_template, session, redirect, url_for, current_app, request, flash
from ..models import User
from . import auth
from .forms import RegistrationForm
@auth.route('/register', methods=['GET', 'POST'])
def register():
form = RegistrationForm(request.form)
if request.method == 'POST' and form.validate():
user = User(username=form.username.data, email=form.email.data,
password_hash = form.password.data)
db_session.add(user)
flash('Thanks for registering')
return redirect(url_for('/register'))
#flash('something is wrong')
return render_template('auth/register.html', form=form)
Code: Alles auswählen
{% extends "base.html" %}
{% block title %}Corp Management - Login{% endblock %}
{% block page_content %}
<div class="container">
<div class="row">
<form role="form">
<div class="col-lg-6">
<div class="well well-sm"><strong><span class="glyphicon glyphicon-asterisk"></span>Required Field</strong></div>
<div class="form-group">
<label for="InputName" class="col-2 col-form-label">{{ form.username.label }}</label>
<div class="input-group">
{{ form.username(**{'class':'form-control', 'placeholder':'username'}) }}
<span class="input-group-addon"><span class="glyphicon glyphicon-asterisk"></span></span>
</div>
</div>
<div class="form-group">
<label for="InputEmail">{{ form.email.label }}</label>
<div class="input-group">
{{ form.email(**{'class':'form-control', 'placeholder':'eMail'}) }}
<span class="input-group-addon"><span class="glyphicon glyphicon-asterisk"></span></span>
</div>
</div>
<div class="form-group">
<label for="InputEmail">{{ form.password.label}}</label>
<div class="input-group">
{{ form.password(**{'class':'form-control'}) }}
<span class="input-group-addon"><span class="glyphicon glyphicon-asterisk"></span></span>
</div>
</div>
<div class="form-group">
<label for="InputEmail">{{ form.confirm.label}}</label>
<div class="input-group">
{{ form.confirm(**{'class':'form-control'}) }}
<span class="input-group-addon"><span class="glyphicon glyphicon-asterisk"></span></span>
</div>
</div>
{{form.submit(**{'class':'btn btn-info pull-right'})}}
</div>
</form>
<div class="col-lg-5 col-md-push-1">
<div class="col-md-12">
{% for field in form.errors %}
{% for error in form.errors[field] %}
<div class="alert alert-error">
<strong>Error!</strong> {{error}}
</div>
{% endfor %}
{% endfor %}
</div>
</div>
</div>
</div>
{% endblock %}