インタラクティブ・シェルを使わない具体的な使用法

110 views
Skip to first unread message

shinriyo

unread,
Apr 11, 2012, 4:11:54 AM4/11/12
to web2py...@googlegroups.com
こんにちは

最近web2pyを触ってみました。

http://docs1.erp2py.com/web2py_dal/topics/format.html 
こちらを参考にFormを見てみました。

具体例で説明とありますが、
db.define_table('person',
    Field('name'), format='%(name)s')

db.define_table('dog',
    Field('owner', db.person),
    Field('name'))

こちらをどちらに記載するかが書いて有りません。
おそらくMODELであろうという推測ですが、
「models\db.py」
へ追記しました。
GAEを使用してませんのでこうしました、↓
if request.env.web2py_runtime_gae: 
    db = DAL('gae')
    session.connect(request, response, db=db) # and store sessions and tickets there
else:
    db = DAL('sqlite://storage.sqlite')
    db.define_table('person',
        Field('name'), format='%(name)s')

    db.define_table('dog',
        Field('owner', db.person),
---------

こちらはcontrollers\default.pyに記載しました。
def dog_form():
    form = SQLFORM(db.dog)
    if form.accepts(request.vars, session):
        response.flash = 'form accepted'
    elif form.errors:
        response.flash = 'form has errors'
    else:
        response.flash = 'please fill out the form'
    return dict(form=form)

defaultコントローラのdog_form関数ですので、こちらにテンプレートを作成し、
・views\default\dog_form.html
{{extend 'layout.html'}}
{{=from}}

このように記載しました。
が、うまくいきません。



db
.define_table('person', Field('name'), format='%(name)s') db.define_table('dog', Field('owner', db.person), Field('name'))

こちらは、存在していなければテーブルを作成する仕組みだと思いますが、
すでに存在していれば作らないといったことをわかってくれません。
そもそも、記載する場所がドキュメントにはありません。

宜しくお願いします。

Omi Chiba

unread,
Apr 11, 2012, 9:44:21 AM4/11/12
to web2py...@googlegroups.com
>おそらくMODELであろうという推測ですが、
>models\db.py」
>へ追記しました。

OKです。ページの一番下に記述すればいいと思います。


>・views\default\dog_form.html
>{{extend 'layout.html'}}
>{{=from}}

{{=form}}念のため、スペルミスしてないか確認してみてください。

>こちらは、存在していなければテーブルを作成する仕組みだと思いますが、
>すでに存在していれば作らないといったことをわかってくれません。

databasesフォルダのログを削除するなどしない限り、通常はすでに存在しているテーブルには何もしませんが、
もしテーブルの作成、変更を強制的に無効にしたい場合は以下の記述を使えますよ。

 db = DAL('sqlite://storage.sqlite')
=>
 db = DAL('sqlite://storage.sqlite', migrate=False)

shinriyo

unread,
Apr 11, 2012, 11:40:52 AM4/11/12
to web2py...@googlegroups.com
Omi Chibaさん

返信有り難うございます。おかげ様解決しました。


OKです。ページの一番下に記述すればいいと思います。

一番下に追加しました。
if 文の中に書かれていたのでスコープから外れていると思いました。
dbという変数はグローバルなのですね?


{{=form}}念のため、スペルミスしてないか確認してみてください。

ご指摘の通り誤っていたようです。ありがとうございます。


databasesフォルダのログを削除するなどしない限り、通常はすでに存在しているテーブルには何もしませんが、
もしテーブルの作成、変更を強制的に無効にしたい場合は以下の記述を使えますよ。

ありがとうございます。

起動中に追記したのに普通に動作していますが、
このdb.pyが呼ばれてテーブルが作成されるタイミングは随時行われているのでしょうか?

宜しくお願いします。

 
 

Omi Chiba

unread,
Apr 11, 2012, 2:20:30 PM4/11/12
to web2py...@googlegroups.com
>if 文の中に書かれていたのでスコープから外れていると思いました。
>dbという変数はグローバルなのですね?

そういわれてみればif外部で参照できますね。。。なんでだろ。
単純にグローバル変数として扱っていいと思います。

>このdb.pyが呼ばれてテーブルが作成されるタイミングは随時行われているのでしょうか? 
アプリのページが表示されたタイミングやappadmin(データベース管理)を表示したタイミングで
ログと現在のテーブル定義を比較して変更があれば更新されます。

migrate=False を指定するとこのチェックを実行しなくなるので、アプリの本番導入時はこれを指定
しておいた方がパフォーマンスが向上するそうです。

kato

unread,
Apr 11, 2012, 4:25:07 PM4/11/12
to web2py...@googlegroups.com
shinriyoさん

http://docs1.erp2py.com/index.html のドキュメントは、DAL及びアクセス制御に特化して書いています。
このため他のweb2pyの関連の機能は、このドキュメントでは説明していません。

http://web2py.com/books/default/chapter/31/3 などを事前に読んで頂ければ、理解が深まるかと思います。

今回の場合で言えば、テンプレートファイル(dog_form.html)を作成しなくても、web2pyはデフォルトのテンプレートを割り当てるかと思います。
これはweb2pyの特徴で、全部を設定しなくても動作します。web2pyの特徴を利用して、少しずつ設定して試してみれば、効率的に理解できると思います。

あとOmiさんも書かれていますが、db.py のDB設定はファイルの一番最後に記述するのが普通です。特にshinriyoさんはIF文中に記述していますが、
環境がGAEでなかったらsqliteを、GAEだったらdatastoreへの接続DALオブジェクトを作成するという、判定文中にDB定義を記述するのは、
ポータビリティの観点からも好ましいものではないと思います。

>if 文の中に書かれていたのでスコープから外れていると思いました。
>dbという変数はグローバルなのですね?

モデル定義で記述されることは、dbに限らず authやcrudなど全てグローバル変数だと思います。
PythonではIF文でスコープを区切ることができなかったと思います(関数やクラスなら可能)。


2012年4月12日3:20 Omi Chiba <ochi...@gmail.com>:

shinriyo

unread,
Apr 12, 2012, 5:21:38 AM4/12/12
to web2py...@googlegroups.com
Omi Chibaさん

返信有難う御座います。

>databasesフォルダのログを削除するなどしない限り、通常はすでに存在しているテーブルには何もしませんが、

こちらを再度確認しましたが、databases フォルダのログを消したりしてませんが、
Windows環境では、migrateパラメータをFalseにしておかないと、「table person already exists」が発生しました。
Mac環境では特に問題はありませんでした。

>migrate=False を指定するとこのチェックを実行しなくなるので、アプリの本番導入時はこれを指定
>しておいた方がパフォーマンスが向上するそうです。

ありがとうございます。
本番では最初からFalseにしておきたいですね。

shinriyo

unread,
Apr 12, 2012, 5:32:57 AM4/12/12
to web2py...@googlegroups.com
 katoさん

返信有難う御座います。
 
http://web2py.com/books/default/chapter/31/3 などを事前に読んで頂ければ、理解が深まるかと思います。
参考にしたいと思います。
 

今回の場合で言えば、テンプレートファイル(dog_form.html)を作成しなくても、web2pyはデフォルトのテンプレートを割り当てるかと思います。
これはweb2pyの特徴で、全部を設定しなくても動作します。web2pyの特徴を利用して、少しずつ設定して試してみれば、効率的に理解できると思います。

試しにdog_form.htmlのビューを削除しますと、 
invalid view (default/dog_form.html) が発生しました。
存在していないないのにinvalid というのはおかしいですが。

>PythonではIF文でスコープを区切ることができなかったと思います(関数やクラスなら可能)。

試してみましたら、if文ではスコープを区切られなかったです。for文もそうでした。
ちなみに、dbはグローバルということも先ほどのURLには記載されていました。

kato

unread,
Apr 12, 2012, 4:53:04 PM4/12/12
to web2py...@googlegroups.com
shinriyoさん 

デフォルトのテンプレートが動かないのは、ビューなどに何らかの手を加えた(layout.htmlなど)、 shinriyoさんの使用されているweb2pyに何らかのバグがある、などの原因だと思います。

前のメールでソースを提示されていましたが、ちょっと前のバージョンのweb2pyのようでした。
なるべく最新版のweb2pyを使用してください。あとpython環境が含まれたバイナリー版ではなくソース版を使用した方が、後々いろいろな問題や
制約が少なくお得です。

2012年4月12日18:32 shinriyo <shin...@gmail.com>:

shinriyo

unread,
Apr 12, 2012, 9:01:29 PM4/12/12
to web2py...@googlegroups.com
katoさん

お世話になっております。返信ありがとうございます。

デフォルトのテンプレートが動かないのは、ビューなどに何らかの手を加えた(layout.htmlなど)、 shinriyoさんの使用されているweb2pyに何らかのバグがある、などの原因だと思います。

「layout.html」はいじりました。
下のロゴの部分や、
 
前のメールでソースを提示されていましたが、ちょっと前のバージョンのweb2pyのようでした。

ソースですが、
Facebook連携アプリを作成したく、
http://www.web2py.com/appliances にあるサンプル集の
「FacebookConnectExample」 をデプロイしたものを使用しました。
こちらのサンプル集のバージョンも意識しなくてはいけないのでしょうか?

こちらでもFacebook連携できそうでしたが、
「Janrain Engage 」の項目にあるJanrain.comが何かわかりませんでしたが、
会員登録しないといけないと思いました。

「OAuth2.0とFacebook」
を参考にしたいですが、説明で指すモデルのファイルはどれを指すかわからないので保留です。

なるべく最新版のweb2pyを使用してください。あとpython環境が含まれたバイナリー版ではなくソース版を使用した方が、後々いろいろな問題や
制約が少なくお得です。

Windows版もMac版もともにバイナリ版を使用していますので、
古いかもしれません。
pipよりもgthubから落とすのが一番いいのでしょうか?

kato

unread,
Apr 12, 2012, 10:46:06 PM4/12/12
to web2py...@googlegroups.com
shinriyoさん 

いろいろなことを書かれているので、順番に書いていきます。
  1. web2pyバイナリ版とソース版
    バイナリ版とソース版ではバージョンに違いはありません。しかし少し高度なこと(例、pythonのモジュールを利用)をする場合、バイナリー版では
    対応出来ないことがあります。安定版の最新バージョンはweb2pyのサイトにありますので、ダウンロードしてください。
    http://www.web2py.com/examples/default/download

  2. Janrain Engage を使ったFacebook連携
    Janrain Engageを使った方法は次のサイトで詳しく説明しています。
    http://docs1.erp2py.com/web2py_ac/authentication/methods/janrain_engage.html 
    APIキーの取り方も説明していますので、参考にしてください。

  3. OAuthとFacebook
    Janrain Engage を使わない場合、次の方法でFacebookの認証を利用可能です。
    https://groups.google.com/d/topic/web2py-japan/Qz8veTACx_w/discussion

  4. FacebookConnectExample のバージョンを意識しなくても良いか?
    FacebookConnectExample を使用したことがないのでわかりませんが、恐らく意識しなくても大丈夫だと思います。
2と3は実際に試したことがあるので、動くと思います。

2012年4月13日10:01 shinriyo <shin...@gmail.com>:

杉田臣輔

unread,
Apr 13, 2012, 12:56:49 AM4/13/12
to web2py...@googlegroups.com
ありがとうございます。

> web2pyバイナリ版とソース版
> バイナリ版とソース版ではバージョンに違いはありません。しかし少し高度なこと(例、pythonのモジュールを利用)をする場合、バイナリー版では
> 対応出来ないことがあります。安定版の最新バージョンはweb2pyのサイトにありますので、ダウンロードしてください。
> http://www.web2py.com/examples/default/download

バイナリ版ですとPythonまでもが同梱されるようですね。

以前ソースを落とそうとpip install web2pyでインストールしたのですが、
起動する方法がわからず、バイナリ版を使用していました。
ソースのダウンロードで使用したいと思います。
virtualenv上でうまく起動できました。

> Janrain Engage を使ったFacebook連携
> Janrain Engageを使った方法は次のサイトで詳しく説明しています。
> http://docs1.erp2py.com/web2py_ac/authentication/methods/janrain_engage.html
> APIキーの取り方も説明していますので、参考にしてください。

ありがとうございます。
このサイトは"db.py"に記載することがきちんろ明示されていて親切ですね。
試してみます。
"モデル定義(db.pyなど)"の「など」が気になりますけど。

> OAuthとFacebook
> Janrain Engage を使わない場合、次の方法でFacebookの認証を利用可能です。
> https://groups.google.com/d/topic/web2py-japan/Qz8veTACx_w/discussion

katoさんの記述ですね。

https://github.com/facebook/python-sdk/」はduplicatedみたいですので、
フォークされた「https://github.com/sciyoshi/pyfacebook.git」を仕様にしたいと思います。

版の新しい第四版の方がduplicatedのを使うのは不思議ですね。
「そして、モデルに以下のコードを追加します。」など
頻繁に"モデル"と出てきて特にファイル名が記載されてませんが、models/db.pyで大丈夫ですか?

> FacebookConnectExample のバージョンを意識しなくても良いか?
> FacebookConnectExample を使用したことがないのでわかりませんが、恐らく意識しなくても大丈夫だと思います。

新規ウィンドウがログイン後のページになったり、
Facebookとしてログインしているのにweb2pyとしてログインしていない状態など
不満な点がありますが、1か2で行いたいと思っています。

kato

unread,
Apr 13, 2012, 2:48:10 AM4/13/12
to web2py...@googlegroups.com
簡単に返信します。

> "モデル定義(db.pyなど)"の「など」が気になりますけど。
>  頻繁に"モデル"と出てきて特にファイル名が記載されてませんが、models/db.pyで大丈夫ですか?

モデル定義は db.py である必要はないそうです。以前、Omiさんが書いていますが、modeles にあるファイルはアルファベット順に読み込まれていくそうです。
このため、あやふやな記述をしています。

>  新規ウィンドウがログイン後のページになったり、
> Facebookとしてログインしているのにweb2pyとしてログインしていない状態など 

Janrain Engage の認証は通常のweb2pyの認証と同じ動作をしたと思います。つまりログインしたらweb2pyもログイン状態になります。
OAuthも同様だったと記憶があります。
少し違っていたのが、OpenIDです。これは作りこみする必要がありました。
新規ウィンドウ云々の話はよくわかりませんが、そのページだけ認証用デコレータを外しても良いかもしれません。


2012年4月13日13:56 杉田臣輔 <shin...@gmail.com>:

杉田臣輔

unread,
Apr 13, 2012, 4:18:13 AM4/13/12
to web2py...@googlegroups.com
いつも返信 ありがとうございます。

> モデル定義は db.py である必要はないそうです。以前、Omiさんが書いていますが、modeles
> にあるファイルはアルファベット順に読み込まれていくそうです。
> このため、あやふやな記述をしています。

なるほどです。理解できました。
ディレクトリ内にファイルが存在されれば読まれるということですね。


> OAuthも同様だったと記憶があります。
Janrain Engageが会社のネットワークに弾かれたのかこちらの方法はまだ確認できませんでしたので
こちらを試してみました。
https://github.com/sciyoshi/pyfacebook.git」を使用しました。
アプリのページトップの右上にある「Login」のタブを押しても同じページにリダイレクトされて
認証画面は出てきませんでした。

特にweb2pyドキュメントに記載されていませんが、
Facebookのデベロッパーサイトのアプリの設定の「Site URL:」を以下のようなURLにしています。(※入力しないと「Invalid
redirect_uri」のため。)
---------
http://127.0.0.1:8000/今回のアプリ名/default/user/login
---------
※127.0.0.1でなく、localhostを使って「http://localhost:8000/今回のアプリ名/default/user/login」ですと、
「Invalid redirect_uri: Given URL is not allowed by the Application
configuration.」になります。


成功された際は「Site URL:」には何を入力されましたでしょうか?
kanoさんのコードを使用しており、
違いといえば以下の部分です
---------------------------------------------------
YOUR_CLIENT_ID='私のFacebook DeveloperのApp ID/API Key'
YOUR_CLIENT_SECRET='私のFacebook DeveloperのApp Secret'
def __init__(self, g):
OAuthAccount.__init__(self, g,
self.YOUR_CLIENT_ID,
self.YOUR_CLIENT_SECRET,
---------------------------------------------------

いろいろ試しましたがうまくうごかなかったです。
web2pyは私にとっては学習コストがまだ高いです・・。

> 少し違っていたのが、OpenIDです。これは作りこみする必要がありました。
> 新規ウィンドウ云々の話はよくわかりませんが、そのページだけ認証用デコレータを外しても良いかもしれません。

「@auth.requires_login()」を関数名の前に置くということですね?
こちら試してみます。

kato

unread,
Apr 13, 2012, 7:04:30 PM4/13/12
to web2py...@googlegroups.com
> 特にweb2pyドキュメントに記載されていませんが、
> Facebookのデベロッパーサイトのアプリの設定の「Site URL:」を以下のようなURLにしています。(※入力しないと「Invalid
> redirect_uri」のため。) 

URLを登録する必要がありますが、ローカルホストのアドレスではなく本番予定のURLを登録してください。

>  いろいろ試しましたがうまくうごかなかったです。 

Facebook OAuth はローカルの開発環境では動かないようです。URLを登録した本番環境でテストしてみてください。

試してみましたが、ローカルでは Invalid redirect_uri というエラーが出ましたが、GAE環境にアップロードしたら動きました。


2012年4月13日17:18 杉田臣輔 <shin...@gmail.com>:

shinriyo

unread,
Apr 14, 2012, 12:44:17 AM4/14/12
to web2py...@googlegroups.com
katoさん

ありがとうございます。
 
URLを登録する必要がありますが、ローカルホストのアドレスではなく本番予定のURLを登録してください。

ローカルホストにしてたのが原因だったのですね。
今までクラウドサービスを使用してましたが、現在使ってません。
ローカルをDNSサービスを経由すればいけるかもしれませんね。
ちなみにURLは「http://katoさんのURL/アプリ名/default/user/login」 にされましたでしょうか?

Facebook OAuth はローカルの開発環境では動かないようです。URLを登録した本番環境でテストしてみてください。

試してみましたが、ローカルでは Invalid redirect_uri というエラーが出ましたが、GAE環境にアップロードしたら動きました。

 https://github.com/facebook/python-sdk(現在公開停止?)
のサンプルにあったtornadoのサンプルはlocalhostでいままで動いてました。
ちなみにSQLAlchemyに置き換えたのはこちらにおいてます。https://github.com/shinriyo/tornado
やはりこれは「JavaScript SDK」を使用しているらしく、AOuth2.0ではない(?)ので
localhostでも大丈夫だったのでしょうね。
AOuth2.0の仕組みが未だに理解できてないですが・・。

kato

unread,
Apr 14, 2012, 2:52:29 AM4/14/12
to web2py...@googlegroups.com
> ちなみにURLは「http://katoさんのURL/アプリ名/default/user/login」 にされましたでしょうか?

いえ、そのような細かいURLは登録せず、ベースのURLだけです(例でいえば、 http://katoさんのURL )

>  のサンプルにあったtornadoのサンプルはlocalhostでいままで動いてました。 

前のメールで一つ間違えていました。本番環境でなければ動かないのではなく、facebook develovers に登録したアプリのURLに一致していなければ
動かないようです。つまり、アプリのURLを


とfacebookに登録すると、ローカルの開発環境で、認証が動くようです。

2012年4月14日13:44 shinriyo <shin...@gmail.com>:

杉田臣輔

unread,
Apr 14, 2012, 9:05:01 PM4/14/12
to web2py...@googlegroups.com
katoさん

ありがとうございます。

> 前のメールで一つ間違えていました。本番環境でなければ動かないのではなく、facebook develovers
> に登録したアプリのURLに一致していなければ
> 動かないようです。つまり、アプリのURLを
>
> http://127.0.0.1:8000
>
> とfacebookに登録すると、ローカルの開発環境で、認証が動くようです。

原因が分かりました。
すでに別のブラウザのタブなどでFacebookでログインしてしまったため、
認証画面に飛ばなかったようでした。
Facebookをログアウトすれば認証画面は出るようになりました。

あと、インポートのところを以下のように「GraphAPIError」もインポートするようににしないと
undefinedエラーになるようでしたので追加しました。(db.py)
---
from facebook import GraphAPI, GraphAPIError
---

katoさんが行った際は、ログインするときちんとビューアの右上の
Loginの表示がLogoutになりましたでしょうか?
Facebookの認証とweb2py自体の認証を同時に行わせる方法がわかりません。
「auth.is_logged_in()」で取得しても常にFalseとなってました。
このドキュメントに設定などが有りそうだと思ったのですが見つかりませんでした。
http://docs1.erp2py.com/web2py_ac/authentication/user_control.html#ac-setup

そのあたりもご存知でしょうか?

kato

unread,
Apr 14, 2012, 11:46:36 PM4/14/12
to web2py...@googlegroups.com
> katoさんが行った際は、ログインするときちんとビューアの右上の
> Loginの表示がLogoutになりましたでしょうか?
> Facebookの認証とweb2py自体の認証を同時に行わせる方法がわかりません。
> 「auth.is_logged_in()」で取得しても常にFalseとなってました。

facebook認証を利用した場合、auth.is_logged_in() もTrue になります。また、ログアウトも表示されます。
web2pyのフォーム認証と他の認証方式を共存させる方法は、次のページに記述しています。


OAuthのことは未だ書かれていませんが、他の認証方式の共存と同じ事になります。


2012年4月15日10:05 杉田臣輔 <shin...@gmail.com>:

杉田臣輔

unread,
Apr 15, 2012, 10:59:24 AM4/15/12
to web2py...@googlegroups.com
katoさん

ありがとうございます。

> facebook認証を利用した場合、auth.is_logged_in() もTrue になります。また、ログアウトも表示されます。
> web2pyのフォーム認証と他の認証方式を共存させる方法は、次のページに記述しています。
>
> http://docs1.erp2py.com/web2py_ac/authentication/methods/methods_outline.html
>
> OAuthのことは未だ書かれていませんが、他の認証方式の共存と同じ事になります。

おそらく「拡張ログインフォーム」のauth.settings.login_formが、既存のログインフォームと共存することだと思いました。
しかし、以前のドキュメントの「OAuth2.0とFacebook」のソースコードに
「auth.settings.login_form=FaceBookAccount(globals())」を既にdb.py
で行なっているので、すでに設定済みだと思いましたが、これとは違いますでしょうか?

kato

unread,
Apr 15, 2012, 4:08:20 PM4/15/12
to web2py...@googlegroups.com
拡張ログインフォームの話ではなく、 Auth.settings.login_methods のところを見てください。
つまりフォーム認証はweb2pyの基本的な認証の機能を担っています。この機能が動いていないと、例え他の認証方式を使っていたとしても、
認証機能がきちんと動きません。

「未登録ユーザIDでのログイン」  という説明もあります。これも結局、認証は他の方式で行うが、IDはフォーム認証で管理されるという意味です。
この他、「認証方式の問い合わせ順とユーザ情報登録」なども参照して、フォーム認証が動いているか確認してみてください。

2012年4月15日23:59 杉田臣輔 <shin...@gmail.com>:

杉田臣輔

unread,
Apr 15, 2012, 9:47:18 PM4/15/12
to web2py...@googlegroups.com
katoさん

いつもありがとうございます。

よくわかっていないのですが、Facebookで認証する場合(Janrainではない方OAuth2.0)は、
Form認証とAOuthを同時にしなければならないということでしょうか?
「Auth.settings.login_methods 」は、デフォルト値は [auth] で、Form認証のことを示しているとありますね。

auth.settings.login_methods = [auth]
を明示的に記載してみました。
具体的には以前設定したモデル「db.py」のauth.settings.login_formの次の行に記載しました。
----
auth.settings.login_form=FaceBookAccount(globals())
auth.settings.login_methods = [auth] #追記
--
挙動は特に変わりませんでした。

「/gluon/contrib/login_method/」の中に「oauth20_account.py」がありましたが
こちらは編集されましたでしょうか?

kato

unread,
Apr 15, 2012, 11:00:25 PM4/15/12
to web2py...@googlegroups.com
今回、facebook OAuth で認証しますが、認証した後に特定の関数へのアクセスを許可したり、ログアウトしたりといった機能が必要になります。
このユーザ認証以外の機能を提供しているのが、Auth と呼ばれる機能です。Authはデフォルトで認証機能を持っていますが、それがフォーム認証です。
つまり、Authが上手く動いていないと、認証以外の機能も動きません。

Authはアプリケーションを作成した時点で、db.py に次のように定義されていると思います。


auth = Auth(db, hmac_key=Auth.get_or_create_key())
またAuthはテーブル定義が必要です。これもアプリケーション作成時に、次のように db.py に記述されています。


auth.define_tables()
facebookのIDはe-mailでなくusernameで設定するよう(確認はしていない)なので、テーブル定義のパラメータを指定するため、次のように変更します。


auth.define_tables(username=True)
また、Authクラスの初期化メソッドでは、login_methods は次のように定義されています。


settings.login_methods = [self]
このため、 auth.settings.login_methods = [auth] を別途記述する必要はありません。

杉田さんのコードを見た感じ、auth変数は動いているようなので、Authテーブル定義が存在するか、そしてパラメターが指定されているか確認してみてください。

oauth20_account.py は特に変更していません。


2012年4月16日10:47 杉田臣輔 <shin...@gmail.com>:

杉田臣輔

unread,
Apr 16, 2012, 6:20:49 PM4/16/12
to web2py...@googlegroups.com
katoさん

返信有り難うございます。

> Authはアプリケーションを作成した時点で、db.py に次のように定義されていると思います。
>
>
> auth = Auth(db, hmac_key=Auth.get_or_create_key())

はい。これはありました

> facebookのIDはe-mailでなくusernameで設定するよう(確認はしていない)なので、テーブル定義のパラメータを指定するため、次のように変更します。
>
>
> auth.define_tables(username=True)
>

こちらで何とかFacebookの認証でなおかつ本体のログインになりました。
Facebookが認証してくれるのに新規登録のメニューやパスワード変更など
が出てしまいおかしいのですが、
このやりとりを参考に
http://docs1.erp2py.com/web2py_ac/authentication/user_control.html#ac-user-change-password

以下のようにdb.pyに設定することで解消できました。
auth.settings.actions_disabled = ['change_password',
'request_reset_password', 'retrieve_username', 'register']
項目はこちらを参考にしました。
https://groups.google.com/forum/?fromgroups#!topic/web2py/qIbESJht7xk

あとは、
「Administrative Interface」ボタンが表示されてしまうのと、Shareボタンが
邪魔なので消したいのですがこちらも設定でできるのでしょうか?

web2pyはやり方が分かれば学習コストを下げられそうなのですが、やり方を探すのが大変な印象です。

kato

unread,
Apr 16, 2012, 8:28:53 PM4/16/12
to web2py...@googlegroups.com
> 「Administrative Interface」ボタンが表示されてしまうのと、Shareボタンが
> 邪魔なので消したいのですがこちらも設定でできるのでしょうか?

Shareボタンは継承元のテンプレートファイル(layout.py)を修正してください。 statusbar clearfix というクラスのDIVタグの中に含まれています。

「Administrative Interface」ボタン というのは、welcomeアプリケーションがの画面が表示されてしまうという話ですか?。

これはアプリケーションのURLマッピングを変更してください。

web2py ディレクトリの中に、router.example.py と  routers.example.py 2つのサンプルがあります。一つはパラメータベースのもう一つは、
パターンベースのサンプルです。どちらか一方でいいので、router.py / routers.py に名前を変えるかコピーして、中身を修正してください。
例えば、routers.py なら、次のように変更すると、デフォルトで表示されるアプリケーションが変更になります。


default_application = 'myapp'    # ordinarily set in base routes.py
default_controller = 'default'      # ordinarily set in app-specific routes.py
default_function = 'index'         # ordinarily set in app-specific routes.py

詳細は、 http://web2py.com/books/default/chapter/31/4#init-アプリケーション  などを参照してください。

2012年4月17日7:20 杉田臣輔 <shin...@gmail.com>:

杉田臣輔

unread,
Apr 17, 2012, 12:12:45 AM4/17/12
to web2py...@googlegroups.com
katoさん

返信ありがとうございます。

> Shareボタンは継承元のテンプレートファイル(layout.py)を修正してください。 statusbar
> clearfix というクラスのDIVタグの中に含まれています。

こちらは、views\layout.htmlで大丈夫でしょうか?
divタグ内の以下をコメントアウトして修正しました。
<!--a class="a2a_dd" href="http://www.addtoany.com/share_save">Share</a-->


> 「Administrative Interface」ボタン というのは、welcomeアプリケーションがの画面が表示されてしまうという話ですか?。

自分で作成したプロジェクトのトップページに「Administrative Interface」ボタンが表示されます。

一応その2つのファイルをrouter.py / routers.py にそれぞれ直してみましたが別の問題だと思います。

kato

unread,
Apr 17, 2012, 1:08:22 AM4/17/12
to web2py...@googlegroups.com
>> 「Administrative Interface」ボタン というのは、welcomeアプリケーションがの画面が表示されてしまうという話ですか?。
> 自分で作成したプロジェクトのトップページに「Administrative Interface」ボタンが表示されます。
> 一応その2つのファイルをrouter.py / routers.py にそれぞれ直してみましたが別の問題だと思います。

杉田さんが言っているのは、アプリケーションのindex関数のことですね。
この関数に対しては、アプリケーション作成時に default/index.html というビューを自動作成します。
このため default/index.html を編集し、先頭の次の記述を、


{{left_sidebar_enabled,right_sidebar_enabled=False,True}}

次のように変更します。


{{left_sidebar_enabled,right_sidebar_enabled=False,False}}
つまり、right_sidbar_enabled 変数を False にします。もしくは right_sidebarブロック自体を、必要なものに書き換えても良いかもしれません。


2012年4月17日13:12 杉田臣輔 <shin...@gmail.com>:

杉田臣輔

unread,
Apr 17, 2012, 10:19:44 AM4/17/12
to web2py...@googlegroups.com
katoさん

ありがとうございます。

> 杉田さんが言っているのは、アプリケーションのindex関数のことですね。

こちらはindexの中に入ってたのですね。
お陰でボタンを消せました。
どこからどこまでがdefaultをいじっていいのかの判断が難しいですね。

shinriyo

unread,
Apr 18, 2012, 2:55:43 AM4/18/12
to web2py...@googlegroups.com
お世話になっています。

TOP画面の左上のメニューですが、
「Home」ボタン は残して、「web2py」のプルダウンのみを削除することは可能でしょうか?

<!-- div id="menu">
   {{=MENU(response.menu, _class='mobile-menu' if is_mobile else 'sf-menu',mobile=is_mobile)}}
</div -->

このようにmenuを削除すると全て削除されてしまいます。

宜しくお願いします。

kato

unread,
Apr 18, 2012, 5:23:36 PM4/18/12
to web2py...@googlegroups.com
※ 件名と内容が合わなくなっているので、このトピックは閉じた方が良いと思います。

Menuを簡単に変更する方法は、グローバル変数の respone.menu を修正します。
局所的に直すには、ビューの先頭などに次のように記述します。


{{ response.menu=[[T('Home'), False, URL('default', 'index')]] }}

全般的に修正する場合は、モデルの menu.py を修正します。今回の場合は、menu.py の一番最後の記述をコメントにすれば、OKです。


#_()

2012年4月18日15:55 shinriyo <shin...@gmail.com>:

shinriyo

unread,
Apr 24, 2012, 7:50:07 AM4/24/12
to web2py...@googlegroups.com
katoさん

ありがとうございます。お陰様で消すことができました。

2012年4月19日木曜日 6時23分36秒 UTC+9 kato:
Reply all
Reply to author
Forward
0 new messages