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 Queue模块详解
Nov 30 Python
Python机器学习之决策树算法实例详解
Dec 06 Python
python中字符串变二维数组的实例讲解
Apr 03 Python
python模块smtplib学习
May 22 Python
浅谈Python在pycharm中的调试(debug)
Nov 29 Python
对Django中static(静态)文件详解以及{% static %}标签的使用方法
Jul 28 Python
Python提取PDF内容的方法(文本、图像、线条等)
Sep 25 Python
如何分离django中的媒体、静态文件和网页
Nov 12 Python
Python3 Click模块的使用方法详解
Feb 12 Python
Django实现whoosh搜索引擎使用jieba分词
Apr 08 Python
如何解决cmd运行python提示不是内部命令
Jul 01 Python
Python常用数据分析模块原理解析
Jul 20 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
德生PL990,目前市面上唯一一款便携式插卡蓝牙全波段高性能收音机
2021/03/02 无线电
Yii2实现同时搜索多个字段的方法
2016/08/10 PHP
dojo 之基础篇
2007/03/24 Javascript
jQuery 第二课 操作包装集元素代码
2010/03/14 Javascript
JS俄罗斯方块,包含完整的设计理念
2010/12/11 Javascript
利用谷歌地图API获取点与点的距离的js代码
2012/10/11 Javascript
Ajax提交与传统表单提交的区别说明
2014/02/07 Javascript
推荐JavaScript实现继承的最佳方式
2014/11/11 Javascript
jQuery网页右侧广告跟随滚动代码分享
2020/04/20 Javascript
angularjs在ng-repeat中使用ng-model遇到的问题
2016/01/21 Javascript
Bootstrap幻灯片轮播图支持触屏左右手势滑动的实现方法
2016/10/13 Javascript
bootstrap组件之导航组件使用方法
2017/01/19 Javascript
深入探究AngularJs之$scope对象(作用域)
2017/07/20 Javascript
JSON创建键值对(key是中文或者数字)方式详解
2017/08/24 Javascript
原生js实现简单的模态框示例
2017/09/08 Javascript
axios的拦截请求与响应方法
2018/08/11 Javascript
element ui分页多选,翻页记忆的实例
2019/09/03 Javascript
解决layui的使用以及针对select、radio等表单组件不显示的问题
2019/09/05 Javascript
vue使用require.context实现动态注册路由
2020/12/25 Vue.js
python遍历目录的方法小结
2016/04/28 Python
Python类属性的延迟计算
2016/10/22 Python
Python中matplotlib中文乱码解决办法
2017/05/12 Python
python sys.argv[]用法实例详解
2018/05/25 Python
Django windows使用Apache实现部署流程解析
2020/10/12 Python
巴西男士胡须和头发护理产品商店:Beard
2017/11/13 全球购物
英国羊绒服装购物网站:Pure Collection
2018/10/22 全球购物
泰国的头号网上婴儿用品店:Motherhood.co.th
2019/04/09 全球购物
俄罗斯品牌服装和鞋子在线商店:BRIONITY
2020/03/26 全球购物
大学毕业生通用求职信
2013/09/28 职场文书
单位人事专员介绍信
2014/01/11 职场文书
称象教学反思
2014/02/03 职场文书
技校毕业生个人学习的自我评价
2014/02/21 职场文书
工作过失检讨书
2014/02/23 职场文书
汇源肾宝广告词
2014/03/20 职场文书
转让协议书范本
2014/04/15 职场文书
三好学生竞选稿范文
2019/08/21 职场文书