GAE/pyで懐かしのwebカウンタを作ってみる
djangoでカウンタを作ってみます.
django 1.2(最新は1.5です)
初期値が変えられる
blacklistが作れる
-
大量のアクセスが来るようなサイトには使わないこと、
いきなり課金になってもしらないですよ()
プロジェクトの作り方
以前の記事、もしくはチュートリアルを参考にする
djangoプロジェクト
以前の記事、もしくはチュートリアルを参考にする
今はdjango-relなどもあるのか...? よく調べてません.
models.py = DataBaseの定義
カウンタ用に以下のようなmodelを作ります.:
class WebPageCount(db.Model): name = db.StringProperty(required=True) count = db.IntegerProperty(required=True) fontsize = db.IntegerProperty(default=16, required=True) height = db.IntegerProperty(default=20, required=True) width = db.IntegerProperty(default=200, required=True) created = db.DateTimeProperty(auto_now_add=True) updated = db.DateTimeProperty(auto_now=True) # white list of access referers = db.StringProperty(required=True, default='{"http://localhost:8080/htmltest":0}' ) # black list of access style = db.TextProperty(required=True, default=""" .normal {background: #FFF; color: #000;} """) ignoreaddrs = db.TextProperty(default="{}", required=True) ignorereferers = db.TextProperty(default="{}", required=True) # black list of access blacklist = db.TextProperty(default="{}", required=True)
- 主要
-
count, referers
- 制御
-
ignoreaddrs, ignorereferers, blacklist
- 見栄え
-
style(SVGのCSS), width/height, fontsize
- とりあえず
-
name, updated/created
今回はrefererでcountを制限するので, count, referersが必須です.
ignore*は一応つけときました. 今回は実装しません?
url.py = URLと処理の対応定義
このプログラムは以下の4つのパスを持ちます.
- count.svg, count
-
カウンタ
- countInit
-
初回DBエンティティの作成
- edit
-
DBエンティティを編集するwebインタフェース
- login
-
editにアクセスした人がgoogleログインしていなかったら こっちから強制的にログインさせます.
- その他
-
上記2つ以外にアクセスした場合のエラー表示や、 reject時のメッセージでのリダイレクト先です.
main/views.py
url.pyより5つのviewを作ります.
今回は簡単なproductなのでclassは使いません.
- def count
-
count.svgのプログラム
- def countInit
-
DBエンティティの作成
GAE/pyは最初にこれが必要です.
管理画面から新規modelのentityは作れないみたいです.
- def invalid
-
countに不正なアクセスをした場合や、login後の htmlを表示します.
- def login
-
editを起動するにはloginが必要なので、 loginをさせるviewです.
- def edit
-
エンティティを編集、表示します.
count.svgの仕様
- 出力:
-
SVG
- 入力:
-
- method:
-
GET (POSTには未対応)
- key:
-
entityのidを指定
- msg:
-
未使用
- REMOTE_ADDR
-
ブラウザからIPアドレスを取得 指定のない場合は、動作しません.
- HTTP_REFERER
-
ブラウザから参照元URLを取得します. 特定のリンクでしかカウンタが動作しないようにします.
指定のない場合は、動作しません.
引数に不正がある場合、 entityのblacklistというtext propertyに REMOTE_ADDR、HTTP_REFERERを保存します.
実装
bitbucketから ソースがダウンロードできる のでそちらを見てください :D
まとめ
次はgaeunitを使ってdebugしたいです.
あと, entityの編集ですが、 appspot.comからでは、textプロパティが編集できないので 仕方なくmanage.htmlを作りました.
localの時はtextプロパティが管理画面から編集できるんですけど,
作ってdeployした後で気づいたんですが.
コメント
Comments powered by Disqus