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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

3507閲覧

AssertionError: View function mapping is overwriting an existing endpoint function: indexの解決方法

dyrobin

総合スコア13

Flask

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/06/15 00:19

編集2021/06/15 00:23

ラズパイに接続したタクトスイッチを押すと、その履歴をsqliteに保存しつつ、押された回数をカウントして、
htmlでwebブラウザに値を返すようなプログラムを考えております。
下記サイトを参考にしております。
https://reerishun.com/makerblog/?p=653

下記コードのように「@app.route部分」を追記し、押された回数をwebブラウザに反映しようと試みましたが、下記エラーが出力されます。
ググりましたが理解できず、このエラーの意味を教えて頂けないでしょうか。

またそもそも@app.routeを記載する場所が正しいのかも疑問です。
table writer内のどこに@app.route部分を記載するのがよろしいのでしょうか。

python

1# -*- encoding:utf-8 -*- 2from flask import Flask, render_template 3import RPi.GPIO as GPIO 4import time 5import sys 6import os 7import sqlite3 8import datetime 9# commandline argument 10args = sys.argv 11GPIO.setmode(GPIO.BCM) 12GPIO.setup(17, GPIO.IN, GPIO.PUD_DOWN) 13app = Flask(__name__) 14countup = 0 15count=0 16# table writer 17def table_wrt(): 18 # switch setup 19 GPIO.setmode(GPIO.BCM) 20 GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) 21 # connect DB 22 conn = sqlite3.connect('pushswitch.db') 23 c = conn.cursor() 24 # count variable 25 i = 0 26 # create table 27 c.execute('select count(*) from sqlite_master where type="table" and name="data"') 28 if c.fetchone() == (0,): 29 c.execute('create table data(time text)') 30 try: 31 while True: 32 if GPIO.input(17) == 1: 33 while GPIO.input(17) == 1: 34 continue 35 # get date and time 36 dt_now = datetime.datetime.now() 37 sql = 'insert into data values (?)' 38 params = (dt_now.strftime('%Y/%m/%d %H:%M:%S'),) 39 # insert table 40 c.execute(sql, params) 41 i += 1 42 print("pushed:", i, "time") 43 44 **@app.route("/") 45 def index(): 46 print(str(os.getpid()) + ": index(): count=" + str(count)) 47 return render_template("index1.html", testcount = count) 48** 49 except KeyboardInterrupt: 50 # data commit 51 conn.commit() 52 # fin 53 conn.close() 54 GPIO.cleanup() 55 sys.exit(0) 56 # data commit 57 conn.commit() 58 # fin 59 conn.close() 60 GPIO.cleanup()

<エラー内容>
pi@raspberrypi:~/dev/flask/countup5 $ python3 countupcustom.py -w
pushed: 1 time
pushed: 2 time
Traceback (most recent call last):
File "countupcustom.py", line 131, in <module>
table_wrt()
File "countupcustom.py", line 62, in table_wrt
@app.route("/")
File "/usr/lib/python3/dist-packages/flask/app.py", line 1250, in decorator
self.add_url_rule(rule, endpoint, f, **options)
File "/usr/lib/python3/dist-packages/flask/app.py", line 66, in wrapper_func
return f(self, *args, **kwargs)
File "/usr/lib/python3/dist-packages/flask/app.py", line 1221, in add_url_rule
'existing endpoint function: %s' % endpoint)
AssertionError: View function mapping is overwriting an existing endpoint function: index

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

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

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

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

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

guest

回答1

0

自己解決

一応、下記コードでAssertionErrorが出力されなくなり、なおかつ当方の実現したい挙動に近づけることはできました。(完全にはうまくいってはいませんが。)

python

1# table writer 2 3def table_wrt(): 4 5 6 def _count(hoge): 7 if GPIO.input(17): 8 global count 9 count += 1 10 print(str(count) + "回目") 11 time.sleep(0.2) 12 13 @app.route("/") 14 def index(): 15 print(str(os.getpid()) + ": index(): count=" + str(count)) 16 return render_template("index1.html", testcount = count) 17 18 GPIO.add_event_detect(17, GPIO.BOTH, callback=_count, bouncetime=1000) 19 time.sleep(0.2) 20 21 # connect DB 22 conn = sqlite3.connect('pushswitch.db') 23 c = conn.cursor() 24 25 # count variable 26 i = 0 27 28 29 # create table 30 c.execute('select count(*) from sqlite_master where type="table" and name="data"') 31 if c.fetchone() == (0,): 32 c.execute('create table data(time text)') 33 34 35 try: 36 while True: 37 if GPIO.input(17) == 1: 38 while GPIO.input(17) == 1: 39 continue 40 # get date and time 41 dt_now = datetime.datetime.now() 42 43 sql = 'insert into data values (?)' 44 params = (dt_now.strftime('%Y/%m/%d %H:%M:%S'),) 45 46 47 # insert table 48 c.execute(sql, params) 49 i += 1 50 print("pushed:", i, "time") 51 52 53 except KeyboardInterrupt: 54 # data commit 55 conn.commit() 56 57 # fin 58 conn.close() 59 GPIO.cleanup() 60 sys.exit(0) 61 62 # data commit 63 conn.commit() 64 65 # fin 66 conn.close() 67 GPIO.cleanup() 68 69app.run("0.0.0.0", debug=True)

投稿2021/06/15 12:54

dyrobin

総合スコア13

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問