python,Django实现的淘宝客登录功能示例

所属分类: 脚本专栏 / python 阅读数: 1872
收藏 0 赞 0 分享

本文实例讲述了python,Django实现的淘宝客登录功能。分享给大家供大家参考,具体如下:

在整理python,django资料的时候,发现了这个东西,也许是当初某位网友或者朋友发过来参考或者一起探讨修改的东西,现在不记得了,也许taobao的接口都变了也有可能,但总体来说还是有参考价值的,主要是做淘宝客客或者返利网会用到taobao登录而用的.

参考代码如下:

#!/usr/bin/python
#coding:utf-8
import datetime, urllib, base64, random
from hashlib import md5
from django.conf import settings
from django.contrib import auth
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
from django.shortcuts import render
from app.taobao.backends import TaobaoBackend
from app.taobao.models import User as taobao_user
from app.taobao.forms import UserOnceChange
from pyapi.taobao.top import Request
def authenticated(request, template):
  if request.method == 'POST':
    form = UserOnceChange(request=request, data=request.POST)
    if form.is_valid():
      request.user.username = form.cleaned_data['username']
      password = form.cleaned_data.get('password', None)
      if password:
        request.user.set_password(form.cleaned_data)
      request.user.save()
      #更新应用用户绑定
      tb_user = request.user.taobao.all()[0]
      tb_user.has_bind_user=True
      tb_user.save()
      return HttpResponseRedirect(reverse('user'))
  top_session = request.GET.get('top_session', None)
  top_parameters = request.GET.get('top_parameters', None)
  top_sign = str(request.GET.get('top_sign', None))
  #解析 top parameters
  if top_parameters:
    back_parameters = base64.decodestring(urllib.unquote(top_parameters))
    infos = dict(k.split("=") for k in back_parameters.split("&"))
    username = infos.get('visitor_nick', None)
    visitor_id = infos.get("visitor_id", None)
    # validate sign 认证返回值中的签名
    local_sign_str = '%s%s%s%s' % (settings.TAOBAO_APP_KEY,
                    top_parameters,
                    top_session,
                    settings.TAOBAO_APP_SECRET)
    local_sign = base64.encodestring(md5(local_sign_str).digest())
    #注意 base64 encode后,字符串最后会有 \n 符, 因此需要清除才能验证
    if top_sign == local_sign.strip(): # 清除 \n
      # 创建/返回淘宝账户
      tb_user, tb_user_created = taobao_user.objects.get_or_create(id=int(visitor_id),
                     nick=username)
      #建立系统用户, 用户名存在则创建随机数扩展
      if tb_user.user_id is None:
        try:
          User.objects.get(username=username)
          django_user_username = username
          tb_user.has_bind_user = True
        except:
          django_user_username = '%s_%s' % (username, random.randint(1000, 10000))
        django_user, django_user_created = User.objects.get_or_create(username=django_user_username)
        if django_user_created:
          django_user.set_password(visitor_id)
          django_user.save()
        tb_user.user = django_user
      # 保存返回的信息:过期时间 token ts等
      tb_user.expires_in = datetime.datetime.now() + datetime.timedelta(seconds=int(infos.get("expires_in", 0)))
      tb_user.ts = infos.get("ts", '')
      tb_user.refresh_token = infos.get("refresh_token", '')
      tb_user.save()
      # update user profile in taobao auth backend
      user = auth.authenticate(id=tb_user.id, nick=tb_user.nick)
      if user:
        auth.login(request, user)
        #如果应用账户没有绑定系统用户,则用户第一次时可以修改用户名
        if not tb_user.has_bind_user:
          form = UserOnceChange(request=request,
                     initial={'username':tb_user.user.username,
                          'password':tb_user.id})
          return render(request, template, locals())
  return HttpResponseRedirect(settings.TAOBAO_AUTH_URL)

希望本文所述对大家基于Django框架的Python程序设计有所帮助。

更多精彩内容其他人还在看

Python调用C/C++的方法解析

这篇文章主要介绍了Python调用C/C++的方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

学习Python爬虫的几点建议

这篇文章主要介绍了学习Python爬虫的几点建议,对新手学习爬虫有很大的帮助,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

Python创建临时文件和文件夹

这篇文章主要介绍了Python如何创建临时文件和文件夹,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

浅析Python 序列化与反序列化

这篇文章主要介绍了Python 序列化与反序列化的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

8种常用的Python工具

这篇文章主要介绍了8种常用的Python工具,帮助大家更好的学习Python,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

python爬虫使用requests发送post请求示例详解

这篇文章主要介绍了python爬虫使用requests发送post请求示例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Python结合Window计划任务监测邮件的示例代码

这篇文章主要介绍了Python结合Window计划任务监测邮件的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Python用来做Web开发的优势有哪些

这篇文章主要介绍了Python用来做Web开发的优势有哪些,文中讲解非常细致,帮助大家更好的理解和学习Python,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

如何解决pycharm调试报错的问题

在本篇内容里小编给大家整理的是一篇关于如何解决pycharm调试报错的问题文章,需要的朋友们可以学习参考下。
收藏 0 赞 0 分享

基于logstash实现日志文件同步elasticsearch

这篇文章主要介绍了基于logstash实现日志文件同步elasticsearch,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多