google analyticsの
Apache側の
gooleで
djangoの
Mezzanineの
環境情報
OS
CentOS release 6.7 (Final)Python Version
Python 2.7.8Package (必要そうな
ものだけ 抜粋)
Django (1.9.6)
Mezzanine (4.1.0)
インストール
追記(django-requestの
version情報)
pip でインストールされた django-request の verisonは 1.4.0 に なります。
version が今後上がれば 以下の 面倒な ことはしなくて 済むようになるかと 思います。 参考サイト
pip で
インストール pip install django-request
settings.py#INSTALLED_APPS
にrequest
を追加する INSTALLED_APPS = ( "request", "admin_backup", "clean_blog",
makemigrations
を実行 python manage.py makemigrations request
WARNINGの
OUTPUT
WARNINGS: ?: (mezzanine.core.W01) Please update your settings to use the TEMPLATES setting rather than the deprecated individual TEMPLATE_ settings. The latter are unsupported and correct behaviour is not guaranteed. Here's a suggestion based on on your existing configuration: ..... Migrations for 'request': 0001_initial.py: - Create model Request
sqlmigrate
を実行 python manage.py sqlmigrate request 0001
BEGIN; -- -- Create model Request -- CREATE TABLE "request_request" ("id" serial NOT NULL PRIMARY KEY, "response" smallint NOT NULL, "method" varchar(7) NOT NULL, "path" varchar(255) NOT NULL, "time" timestamp with time zone NOT NULL, "is_secure" boolean NOT NULL, "is_ajax" boolean NOT NULL, "ip" inet NOT NULL, "referer" varchar(255) NULL, "user_agent" varchar(255) NULL, "language" varchar(255) NULL, "user_id" integer NULL); ALTER TABLE "request_request" ADD CONSTRAINT "request_request_user_id_2a99fbcb_fk_auth_user_id" FOREIGN KEY ("user_id") REFERENCES "auth_user" ("id") DEFERRABLE INITIALLY DEFERRED; CREATE INDEX "request_request_e8701ad4" ON "request_request" ("user_id"); COMMIT;
migrate
を実行 python manage.py migrate request 0001
settings.py#MIDDLEWARE_CLASSES
にrequest.middleware.RequestMiddleware
を追加する
django.contrib.auth
,
django.contrib.flatpages
どちらも使用していないので、
1要素目に追加しました。
MIDDLEWARE_CLASSES = ( "request.middleware.RequestMiddleware",
- Siteの
ドメイン名が、 正しい ことを 確認
ユニークビジター数とトップ参照元を 計算する ために 使うよと いう ことらしいです。
ADMIN画面から 表示してみる。
- 管理メニューTOP
インストールが うまく いくと、 管理者権限の ユーザーで ログインすると、
画面の左メニューに リクエストタブが 表示されるようになりました。
管理メニューリンク押下で、
No module named importlib エラー発生
django-requestが、django1.9ので 削除されたmoduleを 参照して おり、 エラーに なっています。
まだ、pip
で対応モジュールが ダウンロードできないので、 直接編集して 直します。 - 参考 django-request/plugins.py at master · django-request/django-request · GitHub
No module named importlib Request Method: GET Request URL: ...... Django Version: 1.9.6 Exception Type: ImportError Exception Value: No module named importlib Exception Location: /usr/local/lib/python2.7/site-packages/request/plugins.py in load, line 42 Python Executable: /usr/bin/python Python Version: 2.7.8 Python Path: ....
- 参考 django-request/plugins.py at master · django-request/django-request · GitHub
対象箇所を
修正 plugins.py class Plugins(object): def load(self): #from django.utils.importlib import import_module from importlib import import_module from django.core import exceptions
再度動作確認
別のモジュールで
No module named importlib Request Method: GET Request URL: ...... Django Version: 1.9.6 Exception Type: ImportError Exception Value: No module named importlib Exception Location: /usr/local/lib/python2.7/site-packages/request/traffic.py in load, line 18 Python Executable: /usr/bin/python Python Version: 2.7.8 Python Path: ....
- 対象箇所を
修正 traffic.py
class Modules(object): def load(self): #from django.utils.importlib import import_module from importlib import import_module from django.core import exceptions
ログの
一覧表示画面
右メニューを表示すると 以下の 画面が 表示されます。 JSエラーに
なったので、 必要な 静的ファイルを ファイル 置き場に コピー 私の 環境だと、 一覧画面の 表示時に jsエラーに なっていたので、
必要なファイルを ファイル 置き場に コピーしました。
cp -R /usr/local/lib/python2.7/site-packages/request/static/request ${MEZZANINE_PROJECT_ROOT}/static chown -R apache:apache ${MEZZANINE_PROJECT_ROOT}/static
- リクエストを
追加
ログの一覧画面の 右上 リクエストを<wbr>追加
クリックでこちらに 移動します。
正直これはあまり 意味が ない 機能な 気が ....
- Request Overview ログの
一覧画面の 右上 Overview
クリックでこちらに 移動します。
これが欲しかった 機能かと 思われます。
settings.pyの 設定
django-requestでの
結構たくさん
- 参考ページ
プロパティ値の
説明
キー値 | 内容 | デフォルト値 |
---|---|---|
REQUEST_IGNORE_AJAX | ajaxリクエストを無視するか否か | True 無視する |
REQUEST_IGNORE_IP | 無視するIPアドレス | None |
REQUEST_LOG_IP | IPアドレスを記録する/しないを示す。しない場合IPはDEUMMYアドレスに置き換える | True 記録する |
REQUEST_IP_DUMMY | ダミーIPアドレス。REQUEST_LOG_IPがFalseの際に使用する | 1.1.1.1 |
REQUEST_ANONYMOUS_IP | 匿名IPに変更するか否か。Trueだと4オクテット目を1にする | False 変更しない |
REQUEST_LOG_USER | ログインユーザー名を出力するか否か。 | True 出力する |
REQUEST_LOG_USER | ログインユーザー名を出力するか否か。Falseだと名称にNoneが設定される | True 出力する |
REQUEST_IGNORE_USERNAME | ロギングしないユーザーリスト | None |
REQUEST_IGNORE_PATHS | ロギングしないURLのリスト | None |
REQUEST_IGNORE_PATHS | ロギングしないURLのリスト | None |
REQUEST_IGNORE_USER_AGENTS | 無視するユーザーエージェントのリスト | None |
REQUEST_TRAFFIC_MODULES | ロギングモジュール?グラフ表示時に使用する?種類が結構ある | 参考ページ 参照 |
REQUEST_PLUGINS | ロギングプラグイン?グラフ表示時に使用する?種類が結構ある | 参考ページ 参照 |
REQUEST_BASE_URL | SSLや、django.contrib.sites使用しない場合設定する? | ‘http://%s’ % Site.objects.get_current().domain |
REQUEST_ONLY_ERRORS | レスポンスエラー時のみ記録するか否か。 | False:エラー時以外も記録する |
REQUEST_VALID_METHOD_NAMES | 記録するHTTPメソッド | (‘get’, ‘post’, ‘put’, ‘delete’, ‘head’, ‘options’, ‘trace’) |
どれを
設定するか?
一旦以下を設定すれば、 今回の 用途と して 事足りるかと 思ました。
セキュリテイ的には、どちらの 設定変更も 悪かもしれないですが … - REQUEST_IGNORE_USERNAME : 値は
Blog投稿ユーザーを 設定する - REQUEST_IGNORE_USER_AGENTS : 値は
検索エンジンの ロボット達を 設定する
- REQUEST_IGNORE_USERNAME : 値は
settings.pyの
設定
設定対象キー、Valueを settings.pyに 追加しました。 ロボットの ユーザーレージェントと 言っても たくさんあるっぽくて、
どこまで入れるのが 良いのか、 ちょっと 判断できなかったので、
以下の設定を してしばらく 様子見する ことにします。
REQUEST_IGNORE_USERNAME = ('user_name') REQUEST_IGNORE_USER_AGENTS = ( r'Googlebot', r'Baiduspider', )
- apacheを
再起動して 確認
エラーと成りました …
__init__() takes at most 3 arguments (10 given) Request Method: GET Request URL: http://www.monotalk.xyz/ja/xyz_monotalk_admin/ Django Version: 1.9.6 Exception Type: TypeError Exception Value: __init__() takes at most 3 arguments (10 given) Exception Location: /usr/local/lib/python2.7/site-packages/request/router.py in __init__, line 24 Python Executable: /usr/bin/python Python Version: 2.7.8 Python Path: .....
対象箇所を
python3でないと
Github上の
# router.py import re # ---ADD < imprort文を追加 from django.utils.six import string_types class RegexPattern(object): def __init__(self, regex, name=''): self.regex = re.compile(regex, re.UNICODE) self.name = name def resolve(self, string): match = self.regex.search(string) if match: return self.name, match.groupdict() class patterns(object): def __init__(self, unknown, *args): self.patterns = [] self.unknown = unknown # ---DEL TypeErrorとなるため、記述を削除 # for pattern in args: # if pattern.__class__ == str: # self.patterns.append(RegexPattern(pattern)) # else: # self.patterns.append(RegexPattern(*pattern)) # ----------------------------------- for pattern in args: if isinstance(pattern, string_types): self.patterns.append(RegexPattern(pattern)) else: self.patterns.append(RegexPattern(*pattern)) def resolve(self, name): for pattern in self.patterns: match = pattern.resolve(name) if match: return match return self.unknown
再起動後、
purgerequestsの 設定
リクエスト毎に
コマンドラインの
pip install
後にpython manage.py
を
以下、
[request] purgerequests
- 実行方法 ドキュメント に
記載が ありますが、
以下で、実行可能です。
python manage.py purgerequests 4 days
期間は、hour(s)
, day(s)
, week(s)
, month(s)
, year(s)
で
- OUTPUT
4日前以前の
yes/no で
You have requested a database reset. This will IRREVERSIBLY DESTROY any requests created before 4 days ago. That is a total of 380 requests. Are you sure you want to do this?
--noinput
オプションが確認なしで
cron実行時は、
参考サイト (ちょっと ログを 見たい ときに 参考に する)
VPS1台All in One構成だから、
scriptで
アクセスログを
Bashの ワンライナーで 解析 Pythonで
解析する
追記 URLに マルチバイト文字列が 含まれると エラーに なる
管理画面から、
以下の
UnicodeEncodeError at /ja/admin/request/request/ 'ascii' codec can't encode characters in position 66-69: ordinal not in range(128)
こちら、
デコレータ @python_2_unicode_compatible
を
- /usr/local/lib/python2.7/site-packages/request/models.py
from socket import gethostbyaddr from django.db import models from django.conf import settings from django.contrib.auth import get_user_model # python_2_unicode_compatible の import を追加 from django.utils.encoding import python_2_unicode_compatible from django.utils.translation import ugettext_lazy as _ from request.managers import RequestManager from request.utils import HTTP_STATUS_CODES, browsers, engines from request import settings as request_settings AUTH_USER_MODEL = getattr(settings, 'AUTH_USER_MODEL', 'auth.User') # @python_2_unicode_compatible を追加 @python_2_unicode_compatible class Request(models.Model): # Response infomation
追記 SSL環境下で 使用する 場合、 追加で 実施した こと
後日、
管理画面上の
ソースを
実施した
request_tag.py の 置き換え
パイチャートで
HTTPS/HTTP どっちでも
- ディレクトリ移動
cd /usr/local/lib/python2.7/site-packages/request/templatetags
念のため
バックアップ cp request_tag.py request_tag.py.back
最新ファイルダウンロード
curl https://raw.githubusercontent.com/django-request/django-request/master/request/templatetags/request_admin.py > request_admin.py
overview.html の 置き換え
折れ線グラフが
Ajax で
- ディレクトリ移動
cd /usr/local/lib/python2.7/site-packages/request/templates/admin/request/request
念のため
バックアップ cp overview.html overview.html.back
最新ファイルダウンロード
curl https://raw.githubusercontent.com/django-request/django-request/master/request/templates/admin/request/request/overview.html > overview.html
ファイルの
diff抜粋
request url の
diff overview.html overview.html.back --------------------------- 31,38c34,39 < {% if request and request.user %} < <div class="breadcrumbs"> < <a href="{% url "admin:index" %}">{% trans "Home" %}</a> › < <a href="{% url "admin:app_list" "request" %}">{% trans "Request" %}</a> › < <a href="{% url "admin:request_request_changelist" %}">{% trans "Requests" %}</a> › < {% trans "Overview" %} < </div> < {% endif %} --- > <div class="breadcrumbs"> > <a href="../../../">{% trans "Home" %}</a> › > <a href="../../">{% trans "Request" %}</a> › > <a href="../">{% trans "Request" %}</a> › > {% trans "Overview" %} > </div> ----------------------------
長くなりましたが、
コメント