2009-03-10 38 views
25

Chúng tôi sắp triển khai một trang web Django mới và chúng tôi muốn sử dụng Google Analytics để theo dõi lưu lượng truy cập trên trang web. Tuy nhiên, chúng tôi không muốn tất cả các lần truy cập trên các phiên bản phát triển để đóng góp vào thống kê Google Analytics.Triển khai Google Analytics Với Django

Có một vài cách để chúng tôi có thể đối phó với điều này:

  • có một tùy chọn cấu hình trong settings.py mà mẫu cơ sở sử dụng để quyết định có hay không để bao gồm các <script> yếu tố thích hợp,
  • duy trì một chi nhánh mà chúng tôi đưa vào trước khi triển khai cho máy chủ sản xuất mà chúng tôi đảm bảo bao gồm các yếu tố <script>,
  • làm điều gì đó với Google Analytics để chặn lần truy cập đến 127.0.0.1 hoặc máy chủ cục bộ hoặc
  • lse.

Tùy chọn đầu tiên có vẻ hợp lý nhất, nhưng tôi không chắc chắn nếu nó là. Ví dụ: chúng ta có phải bắt đầu chuyển biến số google_analytics vào tất cả các chế độ xem của mình không?

Suy nghĩ của bạn là gì?

Trả lời

39

Trước tiên, hãy tạo cách để máy chủ sản xuất và phát triển của bạn lấy cài đặt từ các tệp khác nhau, nói dev.py và prod.py. Có rất nhiều cách để làm điều này.

Sau đó, tạo cài đặt, GOOGLE_ANALYTICS_KEY. Trong dev.py đặt nó vào chuỗi rỗng. Trong prod.py, hãy đặt nó vào khóa của bạn, chẳng hạn như "UA-124465-1". Tạo một số context processor để thêm cài đặt này vào tất cả ngữ cảnh mẫu của bạn, hoặc là GOOGLE_ANALYTICS_KEY hoặc chỉ cần tiếp tục và thêm mô-đun cài đặt của bạn. Sau đó, trong mẫu của bạn, sử dụng nó để có điều kiện bao gồm mã phân tích của bạn:

{% if settings.GOOGLE_ANALYTICS_KEY %} 
<script> blah blah {{settings.GOOGLE_ANALYTICS_KEY}} blah blah </script> 
{% endif %} 
+0

Cảm ơn Ned, tôi hy vọng đây sẽ là con đường để đi. :) –

2

tôi đều đồng ý với Ned, mặc dù tôi có một thiết lập duy nhất gọi là IS_LIVE_SITE mà Toggles mã Analytics, quảng cáo và một vài thứ khác. Bằng cách này tôi có thể giữ tất cả các phím trong lật đổ (vì nó là một nỗi đau để nhìn chúng lên) và vẫn bật hoặc tắt chúng một cách dễ dàng.

2

Thay vì bao gồm thẻ tập lệnh trực tiếp trong html của bạn, chỉ cần thay đổi javascript phân tích để nó chỉ chạy nếu href không chứa tên trang web của sản phẩm của bạn. Điều này sẽ hoạt động mà không cần thêm bất kỳ cấu hình nào.

+0

Giải pháp rất đơn giản. [Ở đây] (http://stackoverflow.com/a/8178283/5802289) một ví dụ. – J0ANMM

6

Giải pháp của tôi có cách tiếp cận tương tự với câu trả lời ưa thích của Ned, nhưng tách mã phân tích thành mẫu riêng của nó. Tôi thích điều này, vì vậy tôi chỉ có thể sao chép các mẫu từ dự án đến dự án.

Dưới đây là một đoạn trích từ tập tin context_processor tôi:

from django.conf import settings 
from django.template.loader import render_to_string 

def analytics(request): 
    """ 
    Returns analytics code. 
    """ 
    if not settings.DEBUG: 
     return { 'analytics_code': render_to_string("analytics/analytics.html", { 'google_analytics_key: settings.GOOGLE_ANALYTICS_KEY }) } 
    else: 
     return { 'analytics_code': "" } 

Tất nhiên bạn sẽ cần phải nói cho Django để bao gồm này trong ngữ cảnh của bạn. Trong cài đặt của bạn.tập tin py, bao gồm:

TEMPLATE_CONTEXT_PROCESSORS = (
    ... 
    "context_processors.analytics", 
) 

tôi đã thiết lập nó để bao gồm các mã phân tích chỉ khi DEBUG được thiết lập để False, nhưng bạn có thể thích để chìa khóa nó đi một cái gì đó khác, có lẽ một môi trường mới hoàn toàn. Tôi nghĩ rằng DEBUG là một mặc định tốt vì nó giả sử bạn không muốn theo dõi bất kỳ lượt truy cập nào trong khi gỡ lỗi/phát triển.

Tạo một cài đặt với Key Google Analytics của bạn:

GOOGLE_ANALYTICS_KEY = "UA-1234567-8" 

Tạo một mẫu gọi là: "phân tích/analytics.html" trong đó bao gồm một cái gì đó như thế này:

<script type="text/javascript"> 
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); 
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E")); 
</script> 
<script type="text/javascript"> 
try { 
var pageTracker = _gat._getTracker("{{ google_analytics_key }}"); 
pageTracker._trackPageview(); 
} catch(err) {}</script> 

Cuối cùng, ngay trước khi đóng thẻ trong mẫu base.html của bạn, thêm thẻ này:

{{ analytics_code }} 

Bây giờ mã phân tích của bạn sẽ chỉ được bao gồm khi DEBUG = False. Nếu không, không có gì sẽ được bao gồm.

10

Một chút muộn cho bữa tiệc, nhưng có một ứng dụng Django có thể tái sử dụng được gọi là django-google-analytics. Cách dễ nhất để sử dụng nó là:

  1. Thêm ứng dụng google_analytics phần INSTALLED_APPS lại settings.py của bạn.
  2. Trong mẫu cơ sở của bạn, thường là một base.html, chèn thẻ này ở trên cùng: {% load analytics %}
  3. Trong cùng một mẫu, chèn đoạn mã sau ngay trước thẻ cơ thể đóng cửa: {% analytics "UA-xxxxxx-x" %} các UA-xxxxxx-x là một mã Google Analytics duy nhất cho tên miền của bạn.
5

Tất cả các giải pháp khác này có thể hoạt động nhưng giờ đây chúng quá tải vì bạn có thể dễ dàng thiết lập bộ lọc trong Google Analytics để lọc tất cả lưu lượng truy cập không đến từ trang web hoặc trang web sản xuất của bạn. Xem Create/Manage Profile Bộ lọc trong Trợ giúp GA. Một giải pháp không có mã chỉ giúp cuộc sống của mọi người dễ dàng hơn.

Note: có hai hãy cẩn thận

  1. này không làm việc với bộ lọc thời gian thực, bởi vì không có bộ lọc được áp dụng cho thời gian thực (tính đến tháng Bảy năm 2012 - kiểm tra tài liệu của họ)
  2. bạn có là một admin với tài khoản Google Analytics để thiết lập này lên
0

đây là cách đơn giản chết mà tôi giải quyết nó:

Tạo một ứng dụng trong dự án của bạn được gọi là 'utils' nếu bạn chưa có. Xem these directions.

Tuy nhiên, hãy làm theo phương pháp này để bao gồm tất cả các trình xử lý ngữ cảnh chung ngoài cài đặt dự án. Nó có vẻ là một thực hành tốt hơn. Dưới đây là instructions.

Vì vậy, sau khi bạn tạo ứng dụng 'utils', hãy tạo một tệp có tên là context_processors.py trong/utils trông như thế này:

from django.conf import settings 

def googleanalytics(request): 
    return { 
     'google_tracking_id' : settings.GOOGLE_TRACKING_ID, 
    } 

Trong bạn settings.py file, thêm này:

import django.conf.global_settings as DEFAULT_SETTINGS 

TEMPLATE_CONTEXT_PROCESSORS = DEFAULT_SETTINGS.TEMPLATE_CONTEXT_PROCESSORS + (
    'utils.context_processors.googleanalytics', 

)

Hope this helps!

2

Một cách đơn giản khác. Trong settings.py, Kiểm tra debugTrue, sau đó thêm:

INTERNAL_IPS = (
    '127.0.0.1', 
    'localhost', 
) 

Sau đó, bạn có thể sử dụng những thứ trong mẫu của bạn như thế này:

{% if not debug %} 
<script> blah blah </script> 
{% endif %} 

Nếu muốn thay đổi để sản xuất, thiết lập debug để False.

Ref: http://www.djangobook.com/en/2.0/chapter09.html

0

Hi tất cả đó là một bài khá cũ .. Nhưng vì tôi đã dành một số thời gian trong việc tìm kiếm một số ứng dụng có thể dùng lại mà vẫn đang tích cực duy trì tôi muốn chia sẻ những gì tôi tìm thấy:

https://github.com/jcassee/django-analytical

Dự án này vẫn được duy trì tích cực và không yêu cầu ID được thêm vào cơ sở dữ liệu (tôi nghĩ là tốt hơn nếu bạn có một dự án cho mỗi trang web) để nó được gửi trong mã bất kể môi trường có phát triển hay không hoặc sản xuất .

Các vấn đề liên quan