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读取本地文件并解析网页元素的方法
May 21 Python
Python 互换字典的键值对实例
Feb 12 Python
Python实现合并excel表格的方法分析
Apr 13 Python
Django的models模型的具体使用
Jul 15 Python
django认证系统 Authentication使用详解
Jul 22 Python
python 实现检验33品种数据是否是正态分布
Dec 09 Python
Python转换itertools.chain对象为数组的方法
Feb 07 Python
浅谈Python的方法解析顺序(MRO)
Mar 05 Python
Django使用list对单个或者多个字段求values值实例
Mar 31 Python
PyTorch如何搭建一个简单的网络
Aug 24 Python
基于python的opencv图像处理实现对斑马线的检测示例
Nov 29 Python
python Django框架快速入门教程(后台管理)
Jul 21 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下连接ftp实现文件的上传、下载、删除文件实例代码
2010/06/03 PHP
php读取目录所有文件信息dir示例
2014/03/18 PHP
php下pdo的mysql事务处理用法实例
2014/12/27 PHP
WordPress特定文章对搜索引擎隐藏或只允许搜索引擎查看
2015/12/31 PHP
ThinkPHP中where()使用方法详解
2016/04/19 PHP
php批量修改表结构实例
2017/05/24 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
jQuery 方法大全方便学习参考
2010/02/25 Javascript
js 数值项目的格式化函数代码
2010/05/14 Javascript
javascript的函数、创建对象、封装、属性和方法、继承
2011/03/10 Javascript
js onkeypress与onkeydown 事件区别详细说明
2012/12/13 Javascript
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
2013/03/24 Javascript
一个非常全面的javascript URL解析函数和分段URL解析方法
2014/04/12 Javascript
详解JavaScript中的自定义事件编写
2016/05/10 Javascript
Angular 中 select指令用法详解
2016/09/29 Javascript
详解基于javascript实现的苹果系统底部菜单
2016/12/02 Javascript
javascript容错处理代码(屏蔽js错误)
2017/01/20 Javascript
Javascript中构造函数要注意的一些坑
2017/01/23 Javascript
关于Vue Webpack2单元测试示例详解
2017/08/14 Javascript
Vue实现点击时间获取时间段查询功能
2020/08/21 Javascript
react 不用插件实现数字滚动的效果示例
2020/04/14 Javascript
jquery轮播图插件使用方法详解
2020/07/31 jQuery
如何利用nodejs实现命令行游戏
2020/11/24 NodeJs
[42:24]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第一场 11.01
2020/11/02 DOTA
在Python的Django框架中调用方法和处理无效变量
2015/07/15 Python
python实现生命游戏的示例代码(Game of Life)
2018/01/24 Python
Python pygorithm模块用法示例【常见算法测试】
2018/08/16 Python
Python Celery多队列配置代码实例
2019/11/22 Python
Python单链表原理与实现方法详解
2020/02/22 Python
爬虫代理的cookie如何生成运行
2020/09/22 Python
英国优质家居用品网上品牌:URBANARA
2018/06/01 全球购物
跑步、骑行和铁人三项的高性能眼镜和服装:ROKA
2018/07/06 全球购物
敏捷开发的主要原则都有哪些
2015/04/26 面试题
清明祭英烈活动总结
2015/05/11 职场文书
HTML+CSS制作心跳特效的实现
2021/05/26 HTML / CSS
Java 中的 Unsafe 魔法类的作用大全
2021/06/26 Java/Android