Partage
  • Partager sur Facebook
  • Partager sur Twitter

Flask

WTF

Sujet résolu
    28 juin 2020 à 11:50:53

    bonjour tout le monde

    j' aissaye de créer flask-wtf pour créer un login register et puis de le transmettre a une autre page qui va mettre le nom etc

    sauf que ça me met

    TypeError: dashboard() missing 1 required positional argument: 'username'



    from flask import Flask, render_template, redirect, url_for
    from flask_bootstrap import Bootstrap
    from flask_wtf import FlaskForm, recaptcha, form
    from werkzeug.security import generate_password_hash, check_password_hash
    from wtforms import StringField, PasswordField, BooleanField
    from wtforms.validators import InputRequired, Email, Length
    from flask_sqlalchemy import SQLAlchemy
    from flask_login import (LoginManager,
    UserMixin, login_user,
    current_user, login_required)

    app = Flask(__name__)
    app.secret_key = "*"

    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.sqlite3'
    bootstrap = Bootstrap(app)
    db = SQLAlchemy(app)
    login_manager = LoginManager()
    login_manager.init_app(app)
    login_manager.login_view = 'signup'

    class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(15))
    username = db.Column(db.String(15))
    password = année = db.Column(db.String(25))
    description = db.Column(db.String(15))
    classe_module = db.Column(db.String(15))
    classe_gr = db.Column(db.String(15))

    @login_manager.user_loader
    def load_user(user_id):
    return User.query.get(int(user_id))

    class LoginForm(FlaskForm):
    description = StringField('description', validators=[InputRequired(), Length(min=10, max=300)])
    username = StringField("nom d'utilisatuer", validators=[InputRequired(), Length(min=4, max=100)])
    password = PasswordField('mot de passe', validators=[InputRequired(), Length(min=8, max=80)])
    remember = BooleanField('rester connecter')

    class RegisterForm(FlaskForm):
    email = StringField('email', validators=[InputRequired(), Email(message='Email invalide'), Length(max=50)])
    username = StringField("nom d'utilisatuer", validators=[InputRequired(), Length(min=4, max=100)])
    password = PasswordField('mot de passe', validators=[InputRequired(), Length(min=8, max=80)])

    @app.route('/Auth/Se connecter', methods=['GET', 'POST']) def login(): form = LoginForm() if form.validate_on_submit(): user = User.query.filter_by(username=form.username.data).first() if user: if check_password_hash(user.password, form.password.data): login_user(user, remember=form.remember.data) return redirect(url_for("dashboard", username=form.username.data)) return '<h1>Invalid username or password</h1>' return render_template('Auth/login.html', form=form) @app.route("/Auth/S'inscrie", methods=["POST", "GET"]) def signup(): form = RegisterForm() if form.validate_on_submit(): hashed_password = generate_password_hash(form.password.data, method='sha256') new_user = User(username=form.username.data, email=form.email.data, password=hashed_password) db.session.add(new_user) db.session.commit() return redirect(url_for("dashboard", username=form.username.data)) return render_template("Auth/signup.html", form=form) @app.route('/Auth/compte', methods=['POST', "GET"]) def dashboard(username): return render_template("Auth/dashboard.html", username=username, form=form)

    Auth/login.html

    {% extends 'base.html' %}
    {% import 'bootstrap/wtf.html' as wtf %}
    
    {% block title %}Se connecter{% endblock %}
    
    {% block nav%}
            {{ super() }}
    {% endblock %}
    
    {% block content %}
    <form class="form-signin" method="POST" action="/Auth/Se connecter">
            <h2 class="form-signin-heading">s'identifier</h2>
            {{ form.hidden_tag() }}
            {{ wtf.form_field(form.username) }}
            {{ wtf.form_field(form.password) }}
            {{ wtf.form_field(form.remember) }}
            <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
    </form>
    {% endblock %}
    


    Auth/dashboard.html

    {% extends 'base.html' %}
    {% import 'bootstrap/wtf.html' as wtf %}
    
    {% block title %}Compte{% endblock%}
    
    {% block content %}
    
    {% endblock %}
        <h1>{{ username.label }}</h1>
    
    {% block footer %}
    {% endblock %}
    
    




    -
    Edité par Chocolatinedu93 28 juin 2020 à 11:51:47

    • Partager sur Facebook
    • Partager sur Twitter
      28 juin 2020 à 13:04:31

      Salut,

      1) Dans ton url "/Auth/S'inscrie" tu as une apostrophe ce qui est une mauvaise idée. Il vaudrait mieux mettre /auth/sinscrire ou un truc du genre.

      2) Dans ton @app.route('/Auth/compte' il manque le username entre <>

      • Partager sur Facebook
      • Partager sur Twitter
        28 juin 2020 à 14:33:37

        Bonjour,

        Merci pour ta réponse mais finalement je me suis dis que je ne vais pas faire comme ça car ce n'est pas très pratique pour tout ce qui est des cookies, session ...

        • Partager sur Facebook
        • Partager sur Twitter

        Flask

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown