Django 学习
2014-05-15 17:01
169 查看
我的应用很简单。我只需要读取指定日期的收益金额,并保存到我的本地数据库。
我在djaongo项目中创建了一个新的应用,叫做“adsense”。并创建了一个models.py文件来存储认证证书。
[python]
view plaincopy
from django.contrib.auth.models import User
from django.db import models
from oauth2client.django_orm import CredentialsField
class Credential(models.Model):
id = models.ForeignKey(User, primary_key=True)
credential = CredentialsField()
class Revenue(models.Model):
date = models.DateField(unique=True)
revenue = models.DecimalField(max_digits=7, decimal_places=2)
def __unicode__(self):
return '{0} ${1}'.format(self.date, self.revenue)
我把从API控制台下载的JSON文件放到我的应用的文件夹下面,并创建了一个views.py文件:
[python]
view plaincopy
import os
from django.conf import settings
from django.contrib.auth.decorators import login_required
from django.contrib.sites.models import Site
from django.http import HttpResponseBadRequest, HttpResponse
from django.http import HttpResponseRedirect
from oauth2client import xsrfutil
from oauth2client.client import flow_from_clientsecrets
from oauth2client.django_orm import Storage
from .models import Credential
CLIENT_SECRETS = os.path.join(os.path.dirname(__file__), 'client_secrets.json')
FLOW = flow_from_clientsecrets(
CLIENT_SECRETS,
scope='https://www.googleapis.com/auth/adsense.readonly',
redirect_uri='http://{0}/adsense/oauth2callback/'.format(
Site.objects.get_current().domain))
@login_required
def index(request):
storage = Storage(Credential, 'id', request.user, 'credential')
credential = storage.get()
if credential is None or credential.invalid is True:
FLOW.params['state'] = xsrfutil.generate_token(settings.SECRET_KEY,
request.user)
authorize_url = FLOW.step1_get_authorize_url()
return HttpResponseRedirect(authorize_url)
else:
return HttpResponse('Already validated.')
@login_required
def auth_return(request):
if not xsrfutil.validate_token(settings.SECRET_KEY,
request.REQUEST['state'], request.user):
return HttpResponseBadRequest()
credential = FLOW.step2_exchange(request.REQUEST)
storage = Storage(Credential, 'id', request.user, 'credential')
storage.put(credential)
return HttpResponseRedirect("/")
在 urls.py 文件中我包含了一个链接指向我的应用的url文件
main urls.py:
[python]
view plaincopy
from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns(
'',
url(r'^adsense/', include('adsense.urls', namespace='adsense')),
url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
url(r'^admin/', include(admin.site.urls)),
)
adsense/urls.py:
[python]
view plaincopy
from django.conf.urls import patterns, url
urlpatterns = patterns(
'adsense.views',
url(r'^$', 'index', name='index'),
url(r'^oauth2callback/$', 'auth_return', name='auth_return'),
)
最后,创建了一个通过给定日期调用API并获取收益的类。它放在adsense/tasks.py,因为我准备把它当作任务,钩在
Celery/ RabbitMQ之上。
[python]
view plaincopy
import datetime
import httplib2
from apiclient.discovery import build
from django.contrib.auth.models import User
from oauth2client.django_orm import Storage
from .models import Credential, Revenue
TODAY = datetime.date.today()
YESTERDAY = TODAY - datetime.timedelta(days=1)
class Scraper(object):
def get_report(self, start_date=YESTERDAY, end_date=TODAY):
user = User.objects.get(pk=1)
storage = Storage(Credential, 'id', user, 'credential')
credential = storage.get()
if not credential is None or credential.invalid is False:
http = httplib2.Http()
http = credential.authorize(http)
service = build('adsense', 'v1.2', http=http)
reports = service.reports()
report = reports.generate(
startDate=start_date.strftime('%Y-%m-%d'),
endDate=end_date.strftime('%Y-%m-%d'),
dimension='DATE',
metric='EARNINGS',
)
data = report.execute()
for row in data['rows']:
date = row[0]
revenue = row[1]
record = Revenue()
try:
r = Revenue.objects.get(date=date)
pk = r.id
except Revenue.DoesNotExist:
pk = None
record.id = pk
record.date = date
record.revenue = revenue
record.save()
为了让它能工作起来,我在浏览器打开http://localhost:8000/adsense/。这时候会要求我登录Google帐号。我为我的应用授权来访问Adsense。然后,认证证书就会保存在我的本地数据库,然后我可以调用Scraper get_report() 方法。祝贺我吧!。它能顺利工作了。
我在djaongo项目中创建了一个新的应用,叫做“adsense”。并创建了一个models.py文件来存储认证证书。
[python]
view plaincopy
from django.contrib.auth.models import User
from django.db import models
from oauth2client.django_orm import CredentialsField
class Credential(models.Model):
id = models.ForeignKey(User, primary_key=True)
credential = CredentialsField()
class Revenue(models.Model):
date = models.DateField(unique=True)
revenue = models.DecimalField(max_digits=7, decimal_places=2)
def __unicode__(self):
return '{0} ${1}'.format(self.date, self.revenue)
我把从API控制台下载的JSON文件放到我的应用的文件夹下面,并创建了一个views.py文件:
[python]
view plaincopy
import os
from django.conf import settings
from django.contrib.auth.decorators import login_required
from django.contrib.sites.models import Site
from django.http import HttpResponseBadRequest, HttpResponse
from django.http import HttpResponseRedirect
from oauth2client import xsrfutil
from oauth2client.client import flow_from_clientsecrets
from oauth2client.django_orm import Storage
from .models import Credential
CLIENT_SECRETS = os.path.join(os.path.dirname(__file__), 'client_secrets.json')
FLOW = flow_from_clientsecrets(
CLIENT_SECRETS,
scope='https://www.googleapis.com/auth/adsense.readonly',
redirect_uri='http://{0}/adsense/oauth2callback/'.format(
Site.objects.get_current().domain))
@login_required
def index(request):
storage = Storage(Credential, 'id', request.user, 'credential')
credential = storage.get()
if credential is None or credential.invalid is True:
FLOW.params['state'] = xsrfutil.generate_token(settings.SECRET_KEY,
request.user)
authorize_url = FLOW.step1_get_authorize_url()
return HttpResponseRedirect(authorize_url)
else:
return HttpResponse('Already validated.')
@login_required
def auth_return(request):
if not xsrfutil.validate_token(settings.SECRET_KEY,
request.REQUEST['state'], request.user):
return HttpResponseBadRequest()
credential = FLOW.step2_exchange(request.REQUEST)
storage = Storage(Credential, 'id', request.user, 'credential')
storage.put(credential)
return HttpResponseRedirect("/")
在 urls.py 文件中我包含了一个链接指向我的应用的url文件
main urls.py:
[python]
view plaincopy
from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns(
'',
url(r'^adsense/', include('adsense.urls', namespace='adsense')),
url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
url(r'^admin/', include(admin.site.urls)),
)
adsense/urls.py:
[python]
view plaincopy
from django.conf.urls import patterns, url
urlpatterns = patterns(
'adsense.views',
url(r'^$', 'index', name='index'),
url(r'^oauth2callback/$', 'auth_return', name='auth_return'),
)
最后,创建了一个通过给定日期调用API并获取收益的类。它放在adsense/tasks.py,因为我准备把它当作任务,钩在
Celery/ RabbitMQ之上。
[python]
view plaincopy
import datetime
import httplib2
from apiclient.discovery import build
from django.contrib.auth.models import User
from oauth2client.django_orm import Storage
from .models import Credential, Revenue
TODAY = datetime.date.today()
YESTERDAY = TODAY - datetime.timedelta(days=1)
class Scraper(object):
def get_report(self, start_date=YESTERDAY, end_date=TODAY):
user = User.objects.get(pk=1)
storage = Storage(Credential, 'id', user, 'credential')
credential = storage.get()
if not credential is None or credential.invalid is False:
http = httplib2.Http()
http = credential.authorize(http)
service = build('adsense', 'v1.2', http=http)
reports = service.reports()
report = reports.generate(
startDate=start_date.strftime('%Y-%m-%d'),
endDate=end_date.strftime('%Y-%m-%d'),
dimension='DATE',
metric='EARNINGS',
)
data = report.execute()
for row in data['rows']:
date = row[0]
revenue = row[1]
record = Revenue()
try:
r = Revenue.objects.get(date=date)
pk = r.id
except Revenue.DoesNotExist:
pk = None
record.id = pk
record.date = date
record.revenue = revenue
record.save()
为了让它能工作起来,我在浏览器打开http://localhost:8000/adsense/。这时候会要求我登录Google帐号。我为我的应用授权来访问Adsense。然后,认证证书就会保存在我的本地数据库,然后我可以调用Scraper get_report() 方法。祝贺我吧!。它能顺利工作了。
相关文章推荐
- 开始学习 limodou 的 Django step by step 了
- Django学习笔记
- Django学习中的一些小问题
- Python -- Django 学习网址
- django学习记录,windows下访问
- Django Form 学习
- Python Web 开发 学习笔记1 安装配置 python+django
- django学习(一)
- django 学习
- [django]学习Model API的实例
- [Django学习] 用户身份验证模块
- [学习] Apache + mod_python + Django Step by Step
- Django学习笔记一:安装配置
- Windows python +django学习
- Django学习笔记
- Django 学习纪要(1) 模版语法
- [Django学习] 用户身份验证模块
- django共同学习规划
- django学习记录,动态web页面尝试
- django学习记录,动态url,另外发现django的时区问题