Как сохранить файл в базе данных и директории используя колбу SQLAlchemy? - PullRequest
0 голосов
/ 20 ноября 2018

Я хочу сохранить age_s, age_e, gender и filename в базе данных SQLite, используя приведенные ниже коды, но у меня проблема.

Когда я загружаю файл, мое имя файла сохраняется в базе данных SQLite, но сам файл не сохраняется в моем системном каталоге.Как сохранить файл в системном каталоге?

Я знаю, что проблема в файле html, но я не могу сохранить файл в каталоге и сохранить имя файла в базе данных, оба действия нав то же время.

app.py

@app.route("/new_contact", methods=('GET', 'POST'))
def new_contact():
    '''
    Create new contact
    '''
    form = ContactForm()
    if form.validate_on_submit():
        my_contact = Contact()
        form.populate_obj(my_contact)
        db.session.add(my_contact)
        try:
            db.session.commit()
            # User info
            flash('Contact created correctly', 'success')
            return redirect(url_for('contacts'))
        except:
            db.session.rollback()
            flash('Error generating contact.', 'danger')

    return render_template('web/new_contact.html', form=form)

new_contact.html

{% extends 'layouts/master.html' %}
{% block title %}New contact{% endblock %}
{% block body %}
<h1>New contact</h1>
<form action="{{ url_for('new_contact') }}" method="post">
    {{ generate_fields(form) }}
    <input type="submit" class="btn btn-success" value="Add">
</form>

{% endblock %}

forms.py

from flask_wtf import FlaskForm
from wtforms import StringField,SelectField,IntegerField,FileField
from wtforms.ext.sqlalchemy.fields import QuerySelectField
from wtforms.validators import DataRequired, Email, Length
class ContactForm(FlaskForm):
    age_s = SelectField(u'age_s', choices=age_types)
    age_e = SelectField(u'age_e', choices=age_types1)
    #age_e = IntegerField('age_e', validators=[Length(min=-1, max=100, message='You cannot have more than 100 characters')])
    gender = SelectField('gender', choices=gender_types)
    #filename = StringField('filename', validators=[Length(min=-1, max=20, message='You cannot have more than 20 characters')]) 
    filename = FileField()
...