質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

2777閲覧

No such file or directoryでtmpファイルが見つからないとエラーが出る

Rf_i.m

総合スコア6

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2021/08/21 00:28

やろうとしていること

Flaskでログイン機能を搭載したウェブアプリを作ろうとしており、今はIDとパスワードを入力してもらった新規アカウント作成をする機能を作成しています。
IDEはCS50IDEというWebベースのIDEを利用しています。
デバイスはWindowsです。
以下が登録する部分のCodeです。(application.pyに書き込んでいます)

python

1@app.route("/register", methods=["GET", "POST"]) 2def register(): 3 """Register user""" 4 if request.method == "POST": 5 # IDとパスワードが有効かどうか調べる 6 # もし有効じゃなかった場合エラーメッセージを返す。 7 # もしユーザーネームがすでに登録されていた場合、alertで/registerにこのユーザーIDは無効ですと表示 8 username = request.form.get("username") 9 password = request.form.get("password") 10 confirmation = request.form.get("pass_confirm") 11 12 # Ensure username was submitted 13 if not username: 14 return apology("must provide username", 403) 15 # Ensure password was submitted 16 elif not password: 17 return apology("must provide password", 403) 18 # Ensure password equal confirm 19 elif password != confirmation: 20 return apology("must provide same password", 403) 21 elif not allow_password_rule(password): 22 return apology("8文字以降の特殊記号を含むパスワードを入力してください", 403) 23 # Query database for username 24 25 user = db.execute("SELECT * FROM users WHERE username = :username", username=username) 26 27 # Ensure username exists and password is correct 28 if len(user) > 0: 29 flash('無効なIDです。別のIDを入力するか、すでに登録している場合はログインしてください') 30 return redirect("/register") 31 # どちらにも当てはまらなかった場合は、データベースにIDとパスワードを追加する。(パスワードはハッシュ化されたもの) 32 hash = generate_password_hash(password) 33 db.execute("INSERT INTO users(username, hash) VALUES (:username, :hash)", username=username, hash=hash) 34 35 36 # Redirect user to login page 37 return redirect("/") 38 39 else: 40 return render_template("register.html")

以下は同じapplication.pyの冒頭に書いているコードです。

python

1import os 2import re 3 4from cs50 import SQL 5from flask import Flask, flash, redirect, render_template, request, session 6from flask_session import Session 7from tempfile import mkdtemp 8from werkzeug.exceptions import default_exceptions, HTTPException, InternalServerError 9from werkzeug.security import check_password_hash, generate_password_hash 10 11from helpers import apology, login_required, lookup, usd 12 13# Configure application 14app = Flask(__name__) 15 16# Ensure templates are auto-reloaded 17app.config["TEMPLATES_AUTO_RELOAD"] = True 18 19class ValidationError(Exception): 20 def __init__(self, message=None, code=None): 21 super(ValidationError, self).__init__() 22 if message is not None: 23 self.message = message 24 self.code = code 25 26# Ensure responses aren't cached 27@app.after_request 28def after_request(response): 29 response.headers["Cache-Control"] = "no-cache, no-store, must-revalidate" 30 response.headers["Expires"] = 0 31 response.headers["Pragma"] = "no-cache" 32 return response 33 34 35# Custom filter 36app.jinja_env.filters["usd"] = usd 37 38# Configure session to use filesystem (instead of signed cookies) 39app.config["SESSION_FILE_DIR"] = mkdtemp() 40app.config["SESSION_PERMANENT"] = False 41app.config["SESSION_TYPE"] = "filesystem" 42Session(app)

エラー内容

/register ページにて、
正しいかたちでID,Passwordを入力して登録ボタンを押すと、
以下のようなエラーメッセージが出ます。

192.168.34.189 - - [20/Aug/2021 23:55:14] "GET / HTTP/1.0" 302 - INFO: 192.168.34.189 - - [20/Aug/2021 23:55:14] "GET / HTTP/1.0" 302 - WARNING: Exception raised while handling cache file Traceback (most recent call last): File "/usr/local/lib/python3.9/site-packages/cachelib/file.py", line 219, in delete os.remove(self._get_filename(key)) FileNotFoundError: [Errno 2] No such file or directory: '/tmp/tmpqdy-----/ae7897b20b-----------------'

(念の為---によって一部非表示にしております)

試してみたこと

  1. 一度サイトのキャッシュやクッキーを削除したのですが、現状は変わりませんでした。
  2. おそらく、以前一時ファイルを複数削除してしまったのが理由だと思い、PCの一時ファイルを見直したのですが、どこを直せば良いのかわかりませんでした。
  3. pythonをローカルにインストールしてみましたが変わりませんでした。

長文失礼しました。
皆目検討がつかないので、ぜひともご助言お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

os.remove(self._get_filename(key))

このときの、self._get_filename(key)がなにを返しているのか調べてみては。
そして、そのファイルが存在してるのかを調べてみてはどうでしょう

投稿2021/08/21 02:32

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Rf_i.m

2021/08/21 02:51

y_waiwaiさんご回答ありがとうございます。 File "/usr/local/lib/python3.9/site-packages/cachelib/file.py" は存在していなかったです。 (self._get_filename(key))がなにを返しているのかを調べることはできなかったです。 デバックによって見つけるということでしょうか?
y_waiwai

2021/08/21 02:54

そこのところで、printしてみたらその値が見れるんではないかと思いますが。 なんにしろ、コードを組むなら、デバッグできる環境を用意しておいたほうがいいと思いますが
Rf_i.m

2021/08/21 03:03

application.py上でprintデバックしたのですが、selfが存在していないと出ました。 おそらくfli.py上で実行されているなかでエラーが出ているのだと思われます。 エラー文の中で指定されているtempファイルが存在がしていないことが原因かと思うのですが、どうでしょうか? 度々申し訳ございません。。 はい、1ステップずつでデバックできる環境を構築する方法を今調べております。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問