OKです。ページの一番下に記述すればいいと思います。
{{=form}}念のため、スペルミスしてないか確認してみてください。
databasesフォルダのログを削除するなどしない限り、通常はすでに存在しているテーブルには何もしませんが、もしテーブルの作成、変更を強制的に無効にしたい場合は以下の記述を使えますよ。
>http://web2py.com/books/default/chapter/31/3 などを事前に読んで頂ければ、理解が深まるかと思います。
今回の場合で言えば、テンプレートファイル(dog_form.html)を作成しなくても、web2pyはデフォルトのテンプレートを割り当てるかと思います。これはweb2pyの特徴で、全部を設定しなくても動作します。web2pyの特徴を利用して、少しずつ設定して試してみれば、効率的に理解できると思います。
デフォルトのテンプレートが動かないのは、ビューなどに何らかの手を加えた(layout.htmlなど)、 shinriyoさんの使用されているweb2pyに何らかのバグがある、などの原因だと思います。
前のメールでソースを提示されていましたが、ちょっと前のバージョンのweb2pyのようでした。
なるべく最新版のweb2pyを使用してください。あとpython環境が含まれたバイナリー版ではなくソース版を使用した方が、後々いろいろな問題や制約が少なくお得です。
> 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で行いたいと思っています。
> モデル定義は 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()」を関数名の前に置くということですね?
こちら試してみます。
URLを登録する必要がありますが、ローカルホストのアドレスではなく本番予定のURLを登録してください。
Facebook OAuth はローカルの開発環境では動かないようです。URLを登録した本番環境でテストしてみてください。試してみましたが、ローカルでは Invalid redirect_uri というエラーが出ましたが、GAE環境にアップロードしたら動きました。
ありがとうございます。
> 前のメールで一つ間違えていました。本番環境でなければ動かないのではなく、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
そのあたりもご存知でしょうか?
ありがとうございます。
> 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
で行なっているので、すでに設定済みだと思いましたが、これとは違いますでしょうか?
いつもありがとうございます。
よくわかっていないのですが、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」がありましたが
こちらは編集されましたでしょうか?
auth = Auth(db, hmac_key=Auth.get_or_create_key())
auth.define_tables()
auth.define_tables(username=True)
settings.login_methods = [self]
返信有り難うございます。
> 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はやり方が分かれば学習コストを下げられそうなのですが、やり方を探すのが大変な印象です。
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
返信ありがとうございます。
> 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 にそれぞれ直してみましたが別の問題だと思います。
{{left_sidebar_enabled,right_sidebar_enabled=False,True}}
{{left_sidebar_enabled,right_sidebar_enabled=False,False}}
ありがとうございます。
> 杉田さんが言っているのは、アプリケーションのindex関数のことですね。
こちらはindexの中に入ってたのですね。
お陰でボタンを消せました。
どこからどこまでがdefaultをいじっていいのかの判断が難しいですね。
{{ response.menu=[[T('Home'), False, URL('default', 'index')]] }}