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使用xmlrpc实例讲解
Dec 17 Python
Python入门篇之数字
Oct 20 Python
Python设计模式编程中解释器模式的简单程序示例分享
Mar 02 Python
python利用标准库如何获取本地IP示例详解
Nov 01 Python
Java编程迭代地删除文件夹及其下的所有文件实例
Feb 10 Python
Python干货:分享Python绘制六种可视化图表
Aug 27 Python
python通过配置文件共享全局变量的实例
Jan 11 Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
Jun 21 Python
python爬虫中多线程的使用详解
Sep 23 Python
Softmax函数原理及Python实现过程解析
May 22 Python
Django2.1.7 查询数据返回json格式的实现
Dec 29 Python
Python语言中的数据类型-序列
Feb 24 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设计模式 Visitor 访问者模式
2011/06/28 PHP
显示程序执行时间php函数代码
2013/08/29 PHP
php中删除数组的第一个元素和最后一个元素的函数
2015/03/07 PHP
mysql_connect localhost和127.0.0.1的区别(网络层阐述)
2015/03/26 PHP
详解PHP的Yii框架中扩展的安装与使用
2016/04/01 PHP
laravel框架添加数据,显示数据,返回成功值的方法
2019/10/11 PHP
把JS与CSS写在同一个文件里的书写方法
2007/06/02 Javascript
DWR Ext 加载数据
2009/03/22 Javascript
ie和firefox不兼容的解决方法集合
2009/04/28 Javascript
JavaScript自执行闭包的小例子
2013/06/29 Javascript
JavaScript通过正则表达式实现表单验证电话号码
2014/03/07 Javascript
Backbone.js的Hello World程序实例
2015/06/19 Javascript
JS常用字符串方法(推荐)
2021/01/15 Javascript
js 定义对象数组(结合)多维数组方法
2016/07/27 Javascript
js内置对象处理_打印学生成绩单的简单实现
2016/09/24 Javascript
Vue.js快速入门实例教程
2016/10/15 Javascript
一篇文章搞定JavaScript类型转换(面试常见)
2017/01/21 Javascript
js仿微信公众平台打标签功能
2017/04/08 Javascript
令按钮悬浮在(手机)页面底部的实现方法
2017/05/02 Javascript
jQuery实现动态控制页面元素的方法分析
2017/12/20 jQuery
Vue中使用 setTimeout() setInterval()函数的问题
2018/09/13 Javascript
vue页面切换过渡transition效果
2018/10/08 Javascript
element ui table 增加筛选的方法示例
2018/11/02 Javascript
javaScript代码飘红报错看不懂?读完这篇文章再试试
2020/08/19 Javascript
Python自定义scrapy中间模块避免重复采集的方法
2015/04/07 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
2018/11/06 Python
Python简单过滤字母和数字的方法小结
2019/01/09 Python
Python配置文件处理的方法教程
2019/08/29 Python
CSS3实现缺角矩形,折角矩形以及缺角边框
2019/12/20 HTML / CSS
美国马匹用品和骑马配件购物网站:Horse.com
2018/01/08 全球购物
大学生村官座谈会发言材料
2014/05/25 职场文书
人民调解员培训方案
2014/06/05 职场文书
机电专业毕业生自我鉴定2014
2014/10/04 职场文书
工作作风建设心得体会
2014/10/22 职场文书
社区党员干部承诺书
2015/05/04 职场文书
小王子读书笔记
2015/06/29 职场文书