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


Posted in Python onJune 12, 2019

本文实例讲述了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 相关文章推荐
Python中列表(list)操作方法汇总
Aug 18 Python
Python入门篇之字符串
Oct 17 Python
python正则表达式match和search用法实例
Mar 26 Python
Python去除字符串两端空格的方法
May 21 Python
Python批量创建迅雷任务及创建多个文件
Feb 13 Python
浅谈pytorch和Numpy的区别以及相互转换方法
Jul 26 Python
Python 存储字符串时节省空间的方法
Apr 23 Python
Python 70行代码实现简单算式计算器解析
Aug 30 Python
Python运行提示缺少模块问题解决方案
Apr 02 Python
Python random模块的使用示例
Oct 10 Python
利用Python如何画一颗心、小人发射爱心
Feb 21 Python
Python sklearn分类决策树方法详解
Sep 23 Python
selenium 安装与chromedriver安装的方法步骤
Jun 12 #Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
Jun 12 #Python
关于不懂Chromedriver如何配置环境变量问题解决方法
Jun 12 #Python
对python3 Serial 串口助手的接收读取数据方法详解
Jun 12 #Python
Python 串口读写的实现方法
Jun 12 #Python
Python获取数据库数据并保存在excel表格中的方法
Jun 12 #Python
Python中一些深不见底的“坑”
Jun 12 #Python
You might like
谈谈PHP语法(4)
2006/10/09 PHP
解析php中heredoc的使用方法
2013/06/17 PHP
php实现MySQL数据库备份与还原类实例
2014/12/09 PHP
详解PHP使用日期时间处理器Carbon人性化显示时间
2017/08/10 PHP
简单实现php上传文件功能
2017/09/21 PHP
thinkphp5修改view到根目录实例方法
2019/07/02 PHP
用JTrackBar实现的模拟苹果风格的滚动条
2007/08/06 Javascript
Jquery 学习笔记(一)
2009/10/13 Javascript
JSON语法五大要素图文介绍
2012/12/04 Javascript
js实现的类似于asp数据字典的数据类型代码实例
2014/09/03 Javascript
javascript中setTimeout使用指南
2015/07/26 Javascript
jQuery实现下拉框功能实例代码
2016/05/06 Javascript
详解 vue.js用法和特性
2017/10/15 Javascript
vue组件中使用props传递数据的实例详解
2018/04/08 Javascript
微信小程序实现登录注册tab切换效果
2020/12/29 Javascript
JavaScript私有变量实例详解
2019/01/24 Javascript
vue实现动态按钮功能
2019/05/13 Javascript
vue项目中实现缓存的最佳方案详解
2019/07/11 Javascript
vue 集成jTopo 处理方法
2019/08/07 Javascript
Openlayers实现距离面积测量
2020/09/28 Javascript
python 全局变量的import机制介绍
2017/09/07 Python
python+POP3实现批量下载邮件附件
2018/06/19 Python
python日志模块logbook使用方法
2019/09/19 Python
利用pytorch实现对CIFAR-10数据集的分类
2020/01/14 Python
CSS3绘制不规则图形的一些方法示例
2015/11/07 HTML / CSS
业务经理的岗位职责
2013/11/16 职场文书
聘用意向书范本
2014/04/01 职场文书
大专毕业生求职信
2014/07/05 职场文书
经贸日语专业自荐信
2014/09/02 职场文书
领导党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
物价局领导班子四风问题整改措施
2014/10/26 职场文书
兵马俑导游词
2015/02/02 职场文书
幼儿园校车安全责任书
2015/05/08 职场文书
家庭暴力离婚起诉书
2015/05/18 职场文书
动视暴雪取消疫苗禁令 让所有员工返回线下工作
2022/04/03 其他游戏
《传颂之物 虚伪的假面》BD发售宣传CM公开
2022/04/04 日漫