前提・実現したいこと
Python3でオブジェクト指向を用いたwebアプリ開発の勉強中です。
フレームワークはbottleを使用しています。
Mainにて別クラスの@GETを割り当てたメソッドを呼び出し、そのメソッドでHTMLファイルをreturnしています。
しかし実行後に指定したURLにアクセスすると
500 Internal Server Error
が発生してしまいます。
またターミナル上のエラーメッセージでは
TypeError: login() missing 1 required positional argument: 'self'
が発生してしまいます。
初心者故愚かなミスを犯している可能性もありますが、有識者の方のご助力をいただきたいです。
何卒よろしくお願いいたします。
発生している問題・エラーメッセージ
ブラウザ上
500 Internal Server Error
ターミナル上
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/bottle.py", line 862, in _handle
return route.call(**args)
File "/usr/local/lib/python3.6/site-packages/bottle.py", line 1740, in wrapper
rv = callback(*a, **ka)
TypeError: login() missing 1 required positional argument: 'self'
該当のソースコード
#main.py
from bottle import run, get, post, template, request # or route
import Welcome
welcome = Welcome.Welcome()
welcome.login()
if name == "main":
run(host="IPアドレス", port=8000, reloader=True)
#Welcome.py
from bottle import run, get, post, template, request # or route
from bottle import TEMPLATE_PATH, jinja2_template as template
class Welcome():
def init(self):
self.wc = "hello"
TEMPLATE_PATH.append("./template") @classmethod @get('/welcome') # or @route('/login') def login(self): """ GETで/welcomeにアクセスした際の処理 """ return template('welcome.html')
#welcome.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Welcome</title> </head> <form action = "/welcome", method = "post"> <body> <h1>Welcome</h1> </body> </html>試したこと
・@classmethodを付け加える
・Welcome.pyのlogin()の引数をlogin(self,str)とし、Mainでlogin("hello")と呼び出してみる。
※Welcome.pyにて、classではなくメソッドのみで書き換え、Mainにて
from Welcome import login, do_login
とした結果、うまく動いています。故にパス指定は正確だと思われます。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。