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

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

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

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

Python 3.x

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

HTML

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

Q&A

解決済

1回答

662閲覧

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

TakeruYamamura

総合スコア7

Bottle

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

Python 3.x

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

HTML

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

0グッド

0クリップ

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

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

Pytho

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

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

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

投稿2018/07/15 11:47

編集2018/07/15 11:49
umyu

総合スコア5846

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問