#python #flask #web #profile
Вопрос:
Я пытаюсь захватить и отобразить изображение и сохранить его на сервере mongodb, чтобы его можно было снова вызвать для самого профиля. У меня ошибка с именем файла. Любая помощь будет очень признательна:
@application.route("/profileEdit", methods = ["POST", "GET"]) def profileEdit(): if request.method == "POST": username = request.form['username'] password = request.form['password'] email = request.form['email'] labor = request.form['image'] phone = request.form['phone'] if 'file' not in request.files: flash('No file part') return redirect(request.url) file = request.files['file'] if file.filename == '': flash('No image selected for uploading') return redirect(request.url) if file and allowed_file(file.filename): filename = secure_filename(file.filename) file.save(os.path.join('/static/Images', filename)) #print('upload_image filename: ' filename) usersDB = client["userRegistration"] users = usersDB['userregistrations'] #existing_user = users.find_one({'name': request.form['username']}) #update to session #if existing_user is None: #return redirect(url_for('registration')) #else: #hashpass = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt()) #users.updateOne({'date': str(date.today()),'name': username, 'password':hashpass, 'email': email, 'phonenumber': phone, 'labor':labor, 'profilePic': profilePic}) #session['username'] = request.form['username'] #return redirect(url_for('profile')) else: flash('Allowed image types are - png, jpg, jpeg, gif') return redirect(request.url) return render_template("profileEdit.html", filename = filename)#, image_file = image_file) @app.route('/display/lt;filenamegt;') def display_image(filename): #print('display_image filename: ' filename) return redirect(url_for('static', filename='/static/Images' filename), code=301)
и для html у меня есть это:
lt;Form method = "POST"gt; {% if filename %} lt;divgt; lt;img src ="{{ url_for('display_image', filename=filename) }}"gt; lt;/divgt; {% endif %} lt;dlgt; lt;pgt; lt;input type="file" name="file" class="form-control" autocomplete="off" requiredgt; lt;/pgt; lt;/dlgt; lt;pgt; {% with messages = get_flashed_messages() %} {% if messages %} lt;ulgt; {% for message in messages %} lt;ligt;{{ message }}lt;/ligt; {% endfor %} lt;/ulgt; {% endif %} {% endwith %} lt;/pgt;
вот новая ошибка ( я забыл ее перезагрузить):
* Running on http://hidden/ (Press CTRL C to quit) hidden - - [14/Nov/2021 18:39:13] "GET /profileEdit HTTP/1.1" 500 - Traceback (most recent call last): File "C:UserstquigOneDriveDocumentsGitHubFS-CSCI150-F21-Team4envLibsite-packagesflaskapp.py", line 2091, in __call__ return self.wsgi_app(environ, start_response) File "C:UserstquigOneDriveDocumentsGitHubFS-CSCI150-F21-Team4envLibsite-packagesflaskapp.py", line 2076, in wsgi_app response = self.handle_exception(e) File "C:UserstquigOneDriveDocumentsGitHubFS-CSCI150-F21-Team4envLibsite-packagesflaskapp.py", line 2073, in wsgi_app response = self.full_dispatch_request() File "C:UserstquigOneDriveDocumentsGitHubFS-CSCI150-F21-Team4envLibsite-packagesflaskapp.py", line 1518, in full_dispatch_request rv = self.handle_user_exception(e) File "C:UserstquigOneDriveDocumentsGitHubFS-CSCI150-F21-Team4envLibsite-packagesflaskapp.py", line 1516, in full_dispatch_request rv = self.dispatch_request() File "C:UserstquigOneDriveDocumentsGitHubFS-CSCI150-F21-Team4envLibsite-packagesflaskapp.py", line 1502, in dispatch_request return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args) File "C:UserstquigOneDriveDocumentsGitHubFS-CSCI150-F21-Team4application.py", line 158, in profileEdit return render_template("profileEdit.html", filename = filename)#, image_file = image_file) UnboundLocalError: local variable 'filename' referenced before assignment
Спасибо вам, ребята из stack overflow, вы, ребята, потрясающие!
Комментарии:
1. Переменная
filename
будет установлена только в том случае, еслиrequest.method == 'POST'
иfile
истинно иallowed_file
истинно, но все остальные ваши случаи все равно подпадают под этоreturn
утверждение.2. Итак, вы говорите, что это не устанавливается, потому что у меня есть барьеры до того, как это будет установлено?
3. Я поместил строку установки переменной под набором переменных файла. Это исправило эту проблему, но она больше не отображает html и css.
4. вы могли бы установить
filename = None
в началеprofileEdit()
, чтобы эта переменная была всегда.