Request.files 400 Плохой запрос в колбе - PullRequest
0 голосов
/ 10 ноября 2018

колба с проектом в моем проекте Я загружаю разрабатываемое приложение. У меня есть 2 области загрузки изображений. У меня нет проблем при загрузке 2. 400 Bad Request: KeyError: Я получаю сообщение об ошибке в стиле 'gelinFoto' при загрузке изображения или при нажатии кнопки отправки, когда я никогда не загружаю его. Где я ошибаюсь?

def admin():
form = KisiForm(request.form)
    if request.method == "POST":
        gelinFoto = request.files['gelinFoto']
        damatFoto = request.files['damatFoto']

        if gelinFoto or damatFoto:
            yol = app.config['UPLOAD_FOLDER'] + whuser
            yol = yol + '/profil'
            gfilename = secure_filename(gelinFoto.filename)
            dfilename = secure_filename(damatFoto.filename)
            gelinFoto.save(os.path.join(yol, gfilename))
            damatFoto.save(os.path.join(yol, dfilename))

        kisi = bilgi(gelinFoto = gfilename, damatFoto = dfilename)
        db.session.add(kisi)
        db.session.commit()
        return redirect(url_for("admin"))
    return render_template("admin/index.html",form=form)

Html

<form method="post" enctype="multipart/form-data" class="col-12">
<div class="form-group">
 <label for="exampleFormControlFile1">Gelinin Fotoğrafı : </label>
  <div class="upload">
    <img src="{{ url_for('static', filename='admin/images/upload.png') }}" class="uploadImage" alt="">{{ render_field(form.gelinFoto,id="gelinFoto",class="gdfoto",accept=".png,.jpg,.jpeg") }} </div>
    <small id="emailHelp" class="form-text text-muted">Gelinin fotoğrafını yükleyiniz.</small>
 </div>
<div class="form-group">
     <label for="exampleFormControlFile1">Damatın Fotoğrafı : </label>
     <div class="upload"><img src="{{ url_for('static', filename='admin/images/upload.png') }}" class="uploadImage" alt="">{{ render_field(form.damatFoto,id="damatFoto",class="gdfoto",accept=".png,.jpg,.jpeg") }}
  </div>
  <small id="emailHelp" class="form-text text-muted">Damatın fotoğrafını yükleyiniz.</small>

1 Ответ

0 голосов
/ 10 ноября 2018

По вашему мнению, у вас есть оба

gelinFoto = request.files['gelinFoto']
damatFoto = request.files['damatFoto']

Вот почему вы получаете эту ошибку

Если файл не предоставлен, то, например, нет request.files['gelinFoto'], и Python пытается его найти, но это не может привести к тому, что нет ключа с именем gelinFoto!

Самый простой трюк - определить тему так:

gelinFoto = request.files['gelinFoto'] if request.files.get('gelinFoto') else None
damatFoto = request.files['damatFoto'] if request.files.get('damatFoto') else None

Таким образом, он использует встроенное условие для получения ключей, если они не предоставлены, тогда он устанавливает значение None

Позже в вашем коде я вижу, что вы сделали это снова,

if gelinFoto or damatFoto:
    # ... Your other coders 
    gfilename = secure_filename(gelinFoto.filename)
    dfilename = secure_filename(damatFoto.filename)
    gelinFoto.save(os.path.join(yol, gfilename))
    damatFoto.save(os.path.join(yol, dfilename))

Это неправильно, вы проверяете это с помощью or, а затем вы, кроме обоих, не должны быть None !!

Лучше сделать операцию для каждого отдельно, например:

if gelinFoto:
    yol = app.config['UPLOAD_FOLDER'] + whuser
    yol = yol + '/profil'
    gfilename = secure_filename(gelinFoto.filename)
    gelinFoto.save(os.path.join(yol, gfilename)

if damatFoto:
    yol = app.config['UPLOAD_FOLDER'] + whuser
    yol = yol + '/profil'
    dfilename = secure_filename(damatFoto.filename)
    damatFoto.save(os.path.join(yol, dfilename)

# I'm not sure if there is a better way to do this but about kisi line This is the best that came up to me ( ofcourse there are better ways )
if gelinFoto and damatFoto:
    kisi = bilgi(gelinFoto = gfilename, damatFoto = dfilename)
elif gelinFoto:
    kisi = bilgi(gelinFoto = gfilename)
elif damatFoto:
    kisi = bilgi(damatFoto = dfilename)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...