コード例 #1
0
ファイル: main.py プロジェクト: jgabatin/cssi_incanvascent
    def get(self):
        current_user = users.get_current_user()
        if not current_user:
            start_template = jinja_current_directory.get_template(
                "templates/main_page.html")
            jinja_values = {
                'signin_page_url': users.create_login_url('/'),
            }
            self.response.write(start_template.render(jinja_values))
        else:
            #datastore
            current_key = ndb.Key('Visitor', current_user.user_id())
            current_visitor = current_key.get()
            if not current_visitor:
                current_visitor = Visitor(key=current_key,
                                          name=current_user.nickname(),
                                          email=current_user.email(),
                                          id=current_user.user_id())
            current_visitor.put()

            #display
            with_user_template = jinja_current_directory.get_template(
                "templates/home_page.html")
            jinja_values = {
                'name': current_user.nickname(),
                'user_addr': current_user.email(),
                'user_id': current_user.user_id(),
                'signout_page_url': users.create_logout_url('/'),
            }
            self.response.write(with_user_template.render(jinja_values))
コード例 #2
0
ファイル: views.py プロジェクト: davidzd/wechat
def login(request):
    '''
    authentication
    :param request:
    :return:
    '''
    if request.method == 'GET':
        code = request.GET.get("code", None)
    # request for the access_token and refresh token
    print "code: %s"%code
    r = getToken(code)
    if r:
        # get user info
        userInfo = getUserInfo(r['access_token'],r['openid'])
        discounts = Discount_Info.objects.filter(lang=0).order_by('-dis_id')[:15]
        ozdiscounts = Discount_Info.objects.filter(lang=1).order_by('-dis_id')[:15]
        rates = Rate.objects.all()
        # store user info
        is_exist = Visitor.objects.filter(openid=userInfo['openid'])
        if not is_exist:
            user = Visitor()
        # 存在即更新
        else:
            user = is_exist[0]
        for key in user.__dict__:
            if key in userInfo:
                setattr(user, key, userInfo[key])
        user.save()
        return render_to_response('index.html', dict(data=userInfo, discounts=discounts, rates=rates, ozdiscounts=ozdiscounts) )
    # else:
    response = HttpResponse(u"认证失败")
    return response
コード例 #3
0
ファイル: views.py プロジェクト: extroid/tracking
def create_visitor(request):
    v = Visitor()
    #get params
    try:
        v.referer = request.META.get('HTTP_REFERER')
    except KeyError, msg:
        logging.error(msg, exc_info=sys.exc_info(), extra={'url': request.build_absolute_uri()})
コード例 #4
0
ファイル: views.py プロジェクト: davidzd/wechat
def index(request):
    '''
    render index
    :param request:
    :return:
    '''
    discounts = Discount_Info.objects.filter(lang=0,status=1).order_by('-dis_id')[:15]
    ha = {u'province': u'', u'openid': u'oa6cGt4PrUC9BSWuK09IvehmgcNUaaaa',
          u'headimgurl': u'http://wx.qlogo.cn/mmopen/PiajxSqBRaELwKcgGMFpnGn4WNVzPicUMoOuI0foZ06uozNK2pC4Bu96VibfyRDzvrkMY2kdSPEMcj97McG2J4a5A/0',
          u'language': u'zh_CN', u'city': u'', u'country': '\xe4\xb8\xad\xe5\x9b\xbd', u'sex': 1, u'privilege': [],
          u'nickname': '\xe5\xb0\x8f\xe5\x93\x92'}

    is_exist = Visitor.objects.filter(openid=ha['openid'])
    banner = Banner.objects.filter()[0]
    if not is_exist:
        user = Visitor()
    # 存在即更新
    else:
        user = is_exist[0]
    for key in user.__dict__:
        if key in ha:
            setattr(user, key, ha[key])
    user.save()
    rates = Rate.objects.all()
    url = MEDIA_URL+os.path.basename(banner.headimgurl.url)
    # return render_to_response('index.html', dict(data=ha,rates=rates , discounts=discounts))
    return render_to_response('cleaning.html', dict(url=url))
コード例 #5
0
ファイル: main.py プロジェクト: marie-mccarthy/loginPractice
    def get(self):
        me = users.get_current_user()
        if not me:
            start_template = jinja_current_dir.get_template("templates/welcome.html")
            jinja_values = {
                'signin_page_url': users.create_login_url('/')
            }

            self.response.write(start_template.render(jinja_values))
        else:
            my_key = ndb.Key('Visitor', me.user_id())
            my_visitor = my_key.get()
            if not my_visitor:
                my_visitor = Visitor(key = my_key, name = me.nickname(), email = me.email(),id = me.user_id(),
                page_view_count = 0)
            my_visitor.page_view_count += 1
            my_visitor.put()

            withuser_template = jinja_current_dir.get_template("templates/withuser.html")
            jinja_values = {
                'name': me.nickname(),
                'email_addr': me.email(),
                'user_id': me.user_id(),
                'signout_page_url': users.create_logout_url('/'),
                'number_of_views': my_visitor.page_view_count
            }

            self.response.write(withuser_template.render(jinja_values))
コード例 #6
0
ファイル: views.py プロジェクト: Taha-Devkit/tracking
def create_visitor(request):
    v = Visitor()
    #get params
    try:
        v.referer = request.META.get('HTTP_REFERER')
    except KeyError, msg:
        logging.error(msg,
                      exc_info=sys.exc_info(),
                      extra={'url': request.build_absolute_uri()})
コード例 #7
0
ファイル: main.py プロジェクト: sandraibrahim/flappypotato
 def get(self):
     if Visitor.query(Visitor.plays > 0).get():
         newVisitor = Visitor.query(Visitor.plays > 0).get()
         newVisitor.plays += 1
         newVisitor.put()
     else:
         Visitor(plays = 1).put()
     self.response.headers['Content-Type'] = 'text/html'
     template_vars = {"username": self.request.get("username")}
     template = jinja_current_directory.get_template('flappypotato.html')
     self.response.write(template.render(template_vars))
コード例 #8
0
ファイル: views.py プロジェクト: alrusdi/queue
def create_visit_request(user, visiting_point, company, data):
    try:
        visitor = user.visitor
    except User.DoesNotExist:
        visitor = Visitor(user=user, phone=data['phone'])
        visitor.save()
    vr = VisitRequest(company=company, visitor=visitor, visiting_point=visiting_point)
    vr.save()
    for k,v in data.items():
        if k[0:3]=='sf_':
            va = VisitAttributes(visit_request=vr, attr_id = int(k[3:]), val=v)
            va.save()
    return vr
コード例 #9
0
def visit():
    """
        Create user if not exists
        Increment user visits otherwise
    """
    ip = request.remote_addr
    visitor = models.storage.get_by_ip(ip)
    if visitor is None:
        visitor = Visitor()
        setattr(visitor, "ip", ip)
        models.storage.new(visitor)
        models.storage.save()
    setattr(visitor, "visits", visitor.visits + 1)
    return jsonify(visitor.to_dict())
コード例 #10
0
ファイル: oldtracking.py プロジェクト: extroid/tracking
def incoming_click(request,category):
    '''Every page load creates a new visitor object.
    This visitor object is updated with a random site and offerset (combination of 2 offers), 
    then redirected to the page template.'''
    #To do: Use publisher component to send messages to any consumer... SendMessage(visitor)
    v = Visitor()
    #get params
    (v.referer, v.user_agent, v.domain, v.category) = (request.META.get('HTTP_REFERER'), 
                                         request.META.get('HTTP_USER_AGENT'),
                                         request.META.get('SERVER_NAME'),
                                         category,
                                         )
    #get url params
    (v.adsource, v.account, v.ad, v.agegroup,v.image, v.channel, v.testing, 
     v.safeview) = (request.GET.get('adsource','missing'),
                                      request.GET.get('account','missing'),
                                      request.GET.get('ad','missing'),
                                      request.GET.get('agegroup','missing'),
                                      request.GET.get('image','missing'),
                                      request.GET.get('channel','missing'),
                                      request.GET.get('testing','missing'),
                                      request.GET.get('safeview','missing'),
                                      )
    if category not in category_list:
        v.category = 'Error'
        v.save()
        return HttpResponse("Category %s was not found" % category)
    
    site = get_site(category)
    v.site = site
    v.offerset_id, offer_list = get_offerset(site)

    v.save()
    name,link = _get_display_name_and_link(v,offer_list)
    return render_to_response('%s/%s' % (v.category,site.page1_template), locals())
コード例 #11
0
def create_new_visitor():
    request_body = request.get_json()
    print(request_body)

    visitor1 = Visitor(
        first_name=request_body["first_name"],
        last_name=request_body["last_name"],
        age=request_body["age"],
        address=request_body["address"],
        phone_number=request_body["phone_number"],
        email=request_body["email"],
    )
    db.session.add(visitor1)
    db.session.commit()
    return jsonify(visitor1.serialize()), 200
コード例 #12
0
ファイル: views.py プロジェクト: alrusdi/queue
def create_visit_request(user, visiting_point, company, data):
    try:
        visitor = user.visitor
    except User.DoesNotExist:
        visitor = Visitor(user=user, phone=data['phone'])
        visitor.save()
    vr = VisitRequest(company=company,
                      visitor=visitor,
                      visiting_point=visiting_point)
    vr.save()
    for k, v in data.items():
        if k[0:3] == 'sf_':
            va = VisitAttributes(visit_request=vr, attr_id=int(k[3:]), val=v)
            va.save()
    return vr
コード例 #13
0
ファイル: main.py プロジェクト: mikaylaeliyha/final-project
    def get(self):
        me = users.get_current_user()
        print "hi"
        jinja_values = {}
        start_template = jinja_env.get_template("templates/main.html")
        if not me:
            jinja_values = {'signin_page_url': users.create_login_url('/')}
            #self.response.write(start_template.render(jinja_values))
        else:
            my_key = ndb.Key('Visitor', me.user_id())
            my_visitor = my_key.get()
            if not my_visitor:
                my_visitor = Visitor(key=my_key,
                                     name=me.nickname(),
                                     email=me.email(),
                                     id=me.user_id())
            jinja_values["signout_page_url"] = users.create_logout_url('/')
            my_visitor.put()

        self.response.write(start_template.render(jinja_values))
コード例 #14
0
ファイル: main.py プロジェクト: Solothread/Out-Fitz
    def get(self):
        user = users.get_current_user()
        if not user:  #User is not signed in
            info = jinja_env.get_template('templates/info.html')
            jinja_values = {'log_url': users.create_login_url('/')}
            self.response.write(info.render(jinja_values))
        else:  #User is signed in
            my_visitor = get_visitor()
            #Check data store, do we already have the users data?
            # if not: Create new entry in datastore for user
            if not my_visitor:
                my_visitor = Visitor(
                    #key = my_key,
                    id=user.user_id(),
                    name=user.nickname(),
                    email=user.email())

                my_visitor.put()

            userhome = jinja_env.get_template('templates/home.html')

            #Outfits query
            #Need to add filter
            query = Outfit.query(
                Outfit.User_ID == user.user_id()).order(-Outfit.Date)
            outfitslist = query.fetch()
            #Query end

            jinja_values = {
                'name': user.nickname(),
                'email_addr': user.email(),
                'user_id': user.user_id(),
                'log_url': users.create_logout_url('/'),
                'month': datetime.datetime.now().strftime("%A, %B %d, %Y"),
                'outfits': outfitslist
            }
            # if my_visitor.image:
            #     jinja_values["img"] = base64.b64encode(my_visitor.image)

            self.response.write(userhome.render(jinja_values))
コード例 #15
0
    def get(self):
        me = users.get_current_user()
        if not me:
            # No user is logged in, send them to the welcome page.
            start_template = jinja_current_dir.get_template("templates/welcome.html")
            jinja_values = {
                'signin_page_url': users.create_login_url('/')
            }
            self.response.write(start_template.render(jinja_values))
        else:
            # A user is logged in
            my_visitor = get_visitor()
            if not my_visitor:
                # If we don't have an entry in DataStore for this user, add one.
                my_visitor = Visitor(
                    key = get_key(me),
                    id = me.user_id(),
                    name = me.nickname(),
                    email = me.email(),
                )
                # We only save if we're creating a new one because we don't
                # modify existing Visitor objects.
                my_visitor.put()

            withuser_template = jinja_current_dir.get_template("templates/withuser.html")
            jinja_values = {
                'name': me.nickname(),
                'email_addr': me.email(),
                'user_id': me.user_id(),
                'signout_page_url': users.create_logout_url('/'),
            }
            if my_visitor.image:
                # base64.b64encode converts the BlobProperty image
                # into a string the browser knows how to show as an image.
                # See withuser.html for the <img> code needed to show a string
                # as an image.
                jinja_values['img'] = base64.b64encode(my_visitor.image)

            self.response.write(withuser_template.render(jinja_values))
コード例 #16
0
ファイル: views.py プロジェクト: Akyya-Mayberry/logbud
def logbud():
    form = VisitorSignInForm()

    # TODO:
    # implement
    if request.method == 'POST':
        if form.validate_on_submit():
            firstname = form.firstname.data.lower()
            lastname = form.lastname.data.lower()
            visiting = form.visiting.data.lower()
            purpose = form.purpose.data.lower()

            # Check if visitor is new
            returning_visitor = Visitor.query.filter_by(
                firstname=firstname, lastname=lastname).first()
            if not returning_visitor:
                new_visitor = Visitor(firstname=firstname, lastname=lastname)
                db.session.add(new_visitor)
                db.session.commit()

                new_visitor = Visitor.query.filter_by(
                    firstname=firstname, lastname=lastname).first()

                new_visit = Visit(visitor_id=new_visitor.id,
                                  visiting=visiting,
                                  purpose=purpose)
                db.session.add(new_visit)
                db.session.commit()

                return redirect('/log')

            # Returning visitor should not have active visit
            for visit in returning_visitor.visits:
                if visit.is_active():
                    flash('Visitor is already logged in!')
                    return redirect('/log/' + str(returning_visitor.id))

            # Log visitor
            new_visit = Visit(visitor_id=returning_visitor.id,
                              visiting=visiting,
                              purpose=purpose)
            db.session.add(new_visit)
            db.session.commit()
            return redirect('/log')

        flash("Form errors!")

    return render_template('logbud.html', form=form)
コード例 #17
0
def incoming_click(request, category):
    '''Every page load creates a new visitor object.
    This visitor object is updated with a random site and offerset (combination of 2 offers), 
    then redirected to the page template.'''
    #To do: Use publisher component to send messages to any consumer... SendMessage(visitor)
    v = Visitor()
    #get params
    (v.referer, v.user_agent, v.domain, v.category) = (
        request.META.get('HTTP_REFERER'),
        request.META.get('HTTP_USER_AGENT'),
        request.META.get('SERVER_NAME'),
        category,
    )
    #get url params
    (v.adsource, v.account, v.ad, v.agegroup, v.image, v.channel, v.testing,
     v.safeview) = (
         request.GET.get('adsource', 'missing'),
         request.GET.get('account', 'missing'),
         request.GET.get('ad', 'missing'),
         request.GET.get('agegroup', 'missing'),
         request.GET.get('image', 'missing'),
         request.GET.get('channel', 'missing'),
         request.GET.get('testing', 'missing'),
         request.GET.get('safeview', 'missing'),
     )
    if category not in category_list:
        v.category = 'Error'
        v.save()
        return HttpResponse("Category %s was not found" % category)

    site = get_site(category)
    v.site = site
    v.offerset_id, offer_list = get_offerset(site)

    v.save()
    name, link = _get_display_name_and_link(v, offer_list)
    return render_to_response('%s/%s' % (v.category, site.page1_template),
                              locals())
コード例 #18
0
def vistor_data(request):
    """来访记录数据"""
    start_time = request.POST.get("start_time")
    end_time = request.POST.get("end_time")
    username = request.POST.get("username")

    rows = Visitor.objects.all()
    # 组合搜索条件
    if start_time != None and start_time != "":
        rows = rows.filter(start_time__gte=start_time)

    if end_time != None and end_time != "":
        rows = rows.filter(end_time__lte=end_time)

    if username != None and username != "":
        rows = rows.filter(user__username__contains=username)

    if request.POST.get('export') == None:
        rows, total = utils.get_page_data(request, rows)

        # 组合json数据
        data = []
        for row in rows:
            data.append(row.to_dict())
        dict = {"total": total, "rows": data}
        return JSONResponse(dict)
    else:
        data = []
        for row in rows:
            data.append(row.to_export_data())
        data = tablib.Dataset(*data, headers=Visitor.get_export_headers())

        filename = settings.TMP_ROOT + "/export.csv"
        open(filename, 'wb').write(data.xls)

        response = HttpResponse(utils.read_file(filename),
                                content_type='application/vnd.ms-excel')
        response['Content-Disposition'] = 'attachment; filename=export.xls'

        BizLog.objects.addnew(request.user, BizLog.EXPORT, u"导出客户端访问记录数据")

        return response
コード例 #19
0
ファイル: main.py プロジェクト: MatthewGT/AtlantaZoo
def register():
    form = RegistrationForm()
    if form.validate_on_submit():
        if (form.usertype.data == 'visitor'):
            user = User(Username=form.username.data,
                        password=form.password.data,
                        Email=form.email.data,
                        UserType=form.usertype.data)
            visitorname = Visitor(user_visitor=username)
            db.session.add_all([user, visitorname])
            db.session.commit()
        if (form.usertype.data == 'staff'):
            user = User(Username=form.username.data,
                        password=form.password.data,
                        Email=form.email.data,
                        UserType=form.usertype.data)
            staffname = Staff(user_staff=user)
            db.session.add_all([user, staffname])
            db.session.commit()
        flash('You can now login.')
        return redirect(url_for('login'))
    return render_template('register.html', form=form)
コード例 #20
0
ファイル: tests.py プロジェクト: venkateshRS/ape
 def test_update_with_data(self):
     v1 = Visitor(self.customer, 'demo-id')
     v2 = v1.update_with_data(dict())
     self.assertIsInstance(v2, Visitor)
     self.assertEqual(v1.id, v2.id)
コード例 #21
0
 def test_constructor(self):
     v = Visitor(self.customer, 'demo-id')
     self.assertEqual(v.id, "demo-id")
コード例 #22
0
 def test_get(self):
     v = Visitor.get(self.customer, "demo-id")
     self.assertEqual(v.id, "demo-id")
     self.assertEqual(v.customer, self.customer)
コード例 #23
0
 def test_update_with_data(self):
     v1 = Visitor(self.customer, 'demo-id')
     v2 = v1.update_with_data(dict())
     self.assertIsInstance(v2, Visitor)
     self.assertEqual(v1.id, v2.id)
コード例 #24
0
 def test_data(self):
     v = Visitor(self.customer, 'demo-id')
     self.assertIsInstance(v.data(), dict)
コード例 #25
0
ファイル: middleware.py プロジェクト: McDoku/denigma
    def process_request(self, request):
        # Don't process AJAX request
        if request.is_ajax(): return

        # Create some useful variables:
        ip_address = utils.get_ip(request)
        user_agent = unicode(request.META.get('HTTP_USER_AGENT', '')[:255], errors='ignore')

        # Retrieve untracked user agents from cache
        ua_key = '_tracking_untracked_uas'
        untracked = cache.get(ua_key)
        if untracked is None:
            log.info("Updating untracked user agent cache")
            untracked = UntrackedUserAgent.objects.all()
            cache.set(ua_key, untracked, 3600)

        # See if the user agent is not supposed to be tracked.
        ACTIVITY = True
        for ua in untracked:
            # if the keyword is found in the user agent, stop tracking
            if user_agent.find(ua.keyword) != -1:
                if not ua.activity:
                    log.debug('Not tracking UA "%s" because of keyword: %s' % (user_agent, ua.keyword))
                    return
                else:
                    ACTIVITY = False

        if hasattr(request, 'session') and request.session.session_key:
            # Use the current session key if we can
            session_key = request.session.session_key
        else:
            # Otherwise just fake a session key
            session_key = '%s:%s' % (ip_address, user_agent)
            session_key = session_key[:40]

        # Ensure that the request.path does not begin with any of the prefixes
        for prefix in self.prefixes:
            if request.path.startswith(prefix):
                log.debug('Not tracking request to: %s' % request.path)
                return

        # If we get here, the URL needs to be tracked
        # determine what time it is
        now = datetime.now()

        attrs = {
            'session_key': session_key,
            'ip_address': ip_address
        }

        # For some reason, Vistors.objects.get_or_create is not working here
        try:
            visitor = Visitor.objects.get(**attrs)
        except Visitor.DoesNotExist:
            # See if there's a visitor with the same IP and user agent
            # within the last 5 minutes
            cutoff = now - timedelta(minutes=5)
            visitors = Visitor.objects.filter(
                ip_address=ip_address,
                user_agent=user_agent,
                last_update__gte=cutoff
            )

            if len(visitors):
                visitor = visitors[0]
                visitor.session_key = session_key
                log.debug('Using existing visitor for IP %s / UA %s: %s' % (ip_address, user_agent, visitor.id))
            else:
                # It's probably safe to assume that the visitor is brand new
                visitor = Visitor(**attrs)
                log.debug('Created a new visitor: %s' % attrs)

        except:
            return

        # Determine whether or not the user is logged in
        user = request.user
        if isinstance(user, AnonymousUser):
            user = None

        # Update the tracking information:
        visitor.user = user
        visitor.user_agent = user_agent

        # If the visitor record is new, or the visitor hasn't been here for
        # at least an hour, update their referrer URL.
        one_hour_ago = now - timedelta(hours=1)
        if not visitor.last_update or visitor.last_update <= one_hour_ago:
            visitor.referrer = utils.u_clean(request.META.get('HTTP_REFERER', 'unknown')[:255])

            # Reset the number of pages they've been to
            visitor.page_views = 0
            visitor.session_start = now

        visitor.url = request.path

        visitor.last_update = now


        # Tracking
        #time_on_site = 0
        #if visitor.start_time:
        #    time_on_site = (now - visitor.start_time).seconds
        #print("time_on_site %s (%s)" % (time_on_site, visitor.time_on_site))
        #visitor.time_on_site = time_on_site

        SAVE_ACTIVITY = False
        if TRACK_ACTIVITIES and ACTIVITY:
            # Match against `path_info` to not include the SCRIPT_NAME
            path = request.path_info.lstrip('/')
            for url in TRACK_IGNORE_URLS:
                if url.match(path):
                    break
            else:
                SAVE_ACTIVITY = True

                visitor.page_views += 1
        else:
            path = request.path_info.lstrip('/')
            for url in TRACK_IGNORE_URLS:
                if url.match(path):
                    break
            else:
                visitor.page_views += 1

        try:
            visitor.save()
        except DatabaseError:
            log.error('There was a problem saving visitor information:\n%s\n\n%s' % (traceback.format_exc(), locals()))

        if SAVE_ACTIVITY:
            activity = Activity(visitor=visitor, url=request.path, view_time=now)
            activity.save()
コード例 #26
0
ファイル: insertSQL.py プロジェクト: MatthewGT/AtlantaZoo
    ]
    for i in range(len(usernames)):
        if (types[i] == 'staff'):
            username = User(Username=usernames[i],
                            password=passwords[i],
                            Email=emails[i],
                            UserType=types[i])
            staffname = Staff(user_staff=username)
            db.session.add_all([username, staffname])
            db.session.commit()
        if (types[i] == 'visitor'):
            username = User(Username=usernames[i],
                            password=passwords[i],
                            Email=emails[i],
                            UserType=types[i])
            visitorname = Visitor(user_visitor=username)
            db.session.add_all([username, visitorname])
            db.session.commit()
        if (types[i] == 'admin'):
            username = User(Username=usernames[i],
                            password=passwords[i],
                            Email=emails[i],
                            UserType=types[i])
            adminname = Admin(user_admin=username)
            db.session.add_all([username, adminname])
            db.session.commit()

    ##insert exhibit data
    exhibitnames = ['Pacific', 'Jungle', 'Sahara', 'Mountainous', 'Birds']
    WaterFeatures = ['Yes', 'No', 'No', 'No', 'Yes']
    sizes = [850, 600, 1000, 1200, 1000]
コード例 #27
0
 def test_components(self):
     v = Visitor(self.customer, 'demo-id')
     self.assertIsInstance(v.components(), list)
コード例 #28
0
ファイル: tests.py プロジェクト: venkateshRS/ape
 def test_get(self):
     v = Visitor.get(self.customer, "demo-id")
     self.assertEqual(v.id, "demo-id")
     self.assertEqual(v.customer, self.customer)
コード例 #29
0
ファイル: tests.py プロジェクト: d3estudio/pepe
    def setUp(self):

        visitor = Visitor(name='New Visitor', email='*****@*****.**',
                          phone='+5511991437851', custom_id='283900739202')
        visitor.save()
コード例 #30
0
ファイル: tests.py プロジェクト: venkateshRS/ape
 def test_components(self):
     v = Visitor(self.customer, 'demo-id')
     self.assertIsInstance(v.components(), list)
コード例 #31
0
ファイル: tests.py プロジェクト: venkateshRS/ape
 def test_data(self):
     v = Visitor(self.customer, 'demo-id')
     self.assertIsInstance(v.data(), dict)
コード例 #32
0
ファイル: middleware.py プロジェクト: al-layth/denigma
    def process_request(self, request):
        # Don't process AJAX request
        if request.is_ajax(): return

        # Create some useful variables:
        ip_address = utils.get_ip(request)
        user_agent = unicode(request.META.get('HTTP_USER_AGENT', '')[:255],
                             errors='ignore')

        # Retrieve untracked user agents from cache
        ua_key = '_tracking_untracked_uas'
        untracked = cache.get(ua_key)
        if untracked is None:
            log.info("Updating untracked user agent cache")
            untracked = UntrackedUserAgent.objects.all()
            cache.set(ua_key, untracked, 3600)

        # See if the user agent is not supposed to be tracked.
        ACTIVITY = True
        for ua in untracked:
            # if the keyword is found in the user agent, stop tracking
            if user_agent.find(ua.keyword) != -1:
                if not ua.activity:
                    log.debug('Not tracking UA "%s" because of keyword: %s' %
                              (user_agent, ua.keyword))
                    return
                else:
                    ACTIVITY = False

        if hasattr(request, 'session') and request.session.session_key:
            # Use the current session key if we can
            session_key = request.session.session_key
        else:
            # Otherwise just fake a session key
            session_key = '%s:%s' % (ip_address, user_agent)
            session_key = session_key[:40]

        # Ensure that the request.path does not begin with any of the prefixes
        for prefix in self.prefixes:
            if request.path.startswith(prefix):
                log.debug('Not tracking request to: %s' % request.path)
                return

        # If we get here, the URL needs to be tracked
        # determine what time it is
        now = datetime.now()

        attrs = {'session_key': session_key, 'ip_address': ip_address}

        # For some reason, Vistors.objects.get_or_create is not working here
        try:
            visitor = Visitor.objects.get(**attrs)
        except Visitor.DoesNotExist:
            # See if there's a visitor with the same IP and user agent
            # within the last 5 minutes
            cutoff = now - timedelta(minutes=5)
            visitors = Visitor.objects.filter(ip_address=ip_address,
                                              user_agent=user_agent,
                                              last_update__gte=cutoff)

            if len(visitors):
                visitor = visitors[0]
                visitor.session_key = session_key
                log.debug('Using existing visitor for IP %s / UA %s: %s' %
                          (ip_address, user_agent, visitor.id))
            else:
                # It's probably safe to assume that the visitor is brand new
                visitor = Visitor(**attrs)
                log.debug('Created a new visitor: %s' % attrs)

        except:
            return

        # Determine whether or not the user is logged in
        user = request.user
        if isinstance(user, AnonymousUser):
            user = None

        # Update the tracking information:
        visitor.user = user
        visitor.user_agent = user_agent

        # If the visitor record is new, or the visitor hasn't been here for
        # at least an hour, update their referrer URL.
        one_hour_ago = now - timedelta(hours=1)
        if not visitor.last_update or visitor.last_update <= one_hour_ago:
            visitor.referrer = utils.u_clean(
                request.META.get('HTTP_REFERER', 'unknown')[:255])

            # Reset the number of pages they've been to
            visitor.page_views = 0
            visitor.session_start = now

        visitor.url = request.path

        visitor.last_update = now

        # Tracking
        #time_on_site = 0
        #if visitor.start_time:
        #    time_on_site = (now - visitor.start_time).seconds
        #print("time_on_site %s (%s)" % (time_on_site, visitor.time_on_site))
        #visitor.time_on_site = time_on_site

        SAVE_ACTIVITY = False
        if TRACK_ACTIVITIES and ACTIVITY:
            # Match against `path_info` to not include the SCRIPT_NAME
            path = request.path_info.lstrip('/')
            for url in TRACK_IGNORE_URLS:
                if url.match(path):
                    break
            else:
                SAVE_ACTIVITY = True

                visitor.page_views += 1
        else:
            path = request.path_info.lstrip('/')
            for url in TRACK_IGNORE_URLS:
                if url.match(path):
                    break
            else:
                visitor.page_views += 1

        try:
            visitor.save()
        except DatabaseError:
            log.error(
                'There was a problem saving visitor information:\n%s\n\n%s' %
                (traceback.format_exc(), locals()))

        if SAVE_ACTIVITY:
            activity = Activity(visitor=visitor,
                                url=request.path,
                                view_time=now)
            activity.save()