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

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

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

Bottleは、PythonのWebサーバです。1つのPythonファイルで構成されており、非常に軽量。Web APIの作成や導入が簡単で、DjangoやFlaskに比べ使いやすくシンプルなことが特徴です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

HTML

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

Q&A

解決済

Pythonにおけるメソッド呼び出し方法

TakeruYamamura
TakeruYamamura

総合スコア7

Bottle

Bottleは、PythonのWebサーバです。1つのPythonファイルで構成されており、非常に軽量。Web APIの作成や導入が簡単で、DjangoやFlaskに比べ使いやすくシンプルなことが特徴です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

HTML

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

1回答

0グッド

0クリップ

492閲覧

投稿2018/07/15 11:20

前提・実現したいこと

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/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

0

ベストアンサー

Pytho

1welcome = Welcome.Welcome() 2welcome.login() #←呼び出し不要では?

あと@classmethodのデコレータも不要かと。

◇参考情報
Python初心者がBottleを使ってみたら案外簡単に動いてくれた

投稿2018/07/15 11:47

編集2018/07/15 11:49
umyu

総合スコア5846

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Bottle

Bottleは、PythonのWebサーバです。1つのPythonファイルで構成されており、非常に軽量。Web APIの作成や導入が簡単で、DjangoやFlaskに比べ使いやすくシンプルなことが特徴です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

HTML

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