[Python] My portfolio form doesnt validate on submit

Discussão em 'Python' iniciado por Stack, Setembro 27, 2024.

  1. Stack

    Stack Membro Participativo

    I made a portfolio form to accept a users portfolio with his image and all other details.

    When i submit the form it always goes to unsuccessful and nothing is submitted

    How can i solve this?

    Im new to this so please be easy on me

    def add_picture(picture):
    random_hex= secrets.token_hex(8)
    _,f_ext=os.path.splitext(picture.filename)
    picture_fn= random_hex + f_ext
    picture_path= os.path.join(app.root_path,'static/default',picture_fn)
    output_size=(200,200)
    i=Image.open(picture)
    i.thumbnail(output_size)
    i.save(picture_path)
    return picture_fn

    #To add a user portfolio
    @app.route('/admin/add',methods=['GET','POST'])
    @login_required
    def create_portfolio():
    form=PortfolioForm()
    if form.validate_on_submit():
    user=User(username=form.username.data,
    email=form.email.data,
    content=form.content.data,
    portfolio=form.portfolio.data,
    github_link=form.github_link.data)
    if form.image.data:
    picture_file=add_picture(form.image.data)
    user.img_path=picture_file
    db.session.add(user)
    db.session.commit()
    flash('Successfully added a portfolio')
    return redirect(url_for('admin'))
    else:
    flash('Unsuccessful')
    return render_template('add_portfolio.html',title='Add Portfolio',form=form)


    I was expecting this to submit so i can display this info

    This is the database

    class User(db.Model):
    id:Mapped[int]= mapped_column(primary_key=True)
    username: Mapped[str] = mapped_column(nullable=False,unique=True)
    email: Mapped[str] = mapped_column(nullable=False,unique=False)
    content : Mapped[str] = mapped_column(nullable=True,unique=False)
    portfolio : Mapped[str] = mapped_column(nullable=True,unique=False)
    github_link : Mapped[str] = mapped_column(nullable=True,unique=False)
    img_path : Mapped[str] = mapped_column(nullable=False,default='default.jpg')


    This is the form

    class PortfolioForm(FlaskForm):
    username= StringField('Username',validators=[InputRequired(),Length(min=3,max=60)])
    email = StringField('Email', validators=[InputRequired(),Email()])
    content = StringField('Skills', validators=[InputRequired(),Length(min=2,max=60)])
    github_link = StringField('Upload your github profile link',validators=[InputRequired()])
    image= FileField('Profile Picture',validators=[FileAllowed(['jpg','png','jpeg',])])
    portfolio = TextAreaField('Portfolio',validators=[InputRequired()])
    submit = SubmitField('Submit Portfolio')


    {% extends 'base.html' %}

    {% block content %}
    <div>
    <h1>Add Portfolio</h1>
    <form method="POST" action="" enctype="multipart/form-data">
    {{ form.hidden_tag() }}
    <fieldset class="form-group">
    <legend class="border-bottom mb-4">Add Portfolio</legend>
    <div>
    {{ form.username.label(class="form-control-label") }}
    {{ form.username(class="form-control form-control-lg") }}
    </div>
    <div>
    {{ form.email.label(class="form-control-label") }}
    {{ form.email(class="form-control form-control-lg") }}
    </div>

    <div>
    {{ form.portfolio.label(class="form-control-label") }}
    {{ form.portfolio(class="form-control form-control-lg") }}
    </div>
    {{ form.image.label(class="form-control-label") }}
    {{ form.image(class="form-control-file form-control-lg") }}
    <small class="text-muted">Accepted file types: jpg, png, jpeg</small>
    </div>
    <div class="form-group">
    {{ form.submit(class="btn btn-outline-info") }}
    </div>
    </fieldset>
    </form>
    </div>
    {% endblock %}


    Any advice on restructuring is appreciated

    Continue reading...

Compartilhe esta Página