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读写Excel文件的实例
Nov 01 Python
tornado框架blog模块分析与使用
Nov 21 Python
在Python中使用成员运算符的示例
May 13 Python
Python简单实现网页内容抓取功能示例
Jun 07 Python
Windows 8.1 64bit下搭建 Scrapy 0.22 环境
Nov 18 Python
浅谈python3.6的tkinter运行问题
Feb 22 Python
python 一维二维插值实例
Apr 22 Python
python2和python3哪个使用率高
Jun 23 Python
通过Python实现Payload分离免杀过程详解
Jul 13 Python
pytorch简介
Nov 11 Python
Python存储读取HDF5文件代码解析
Nov 25 Python
Python图像处理库PIL详细使用说明
Apr 06 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
drupal 代码实现URL重写
2011/05/04 PHP
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
2013/09/30 PHP
PHP-Java-Bridge使用笔记
2014/09/22 PHP
PHP获取数组长度或某个值出现次数的方法
2015/02/11 PHP
php+curl 发送图片处理代码分享
2015/07/09 PHP
javascript:;与javascript:void(0)使用介绍
2013/06/05 Javascript
jquery修改属性值实例代码(设置属性值)
2014/01/06 Javascript
jquery 页面滚动到底部自动加载插件集合
2014/01/31 Javascript
使用javascript做的一个随机点名程序
2014/02/13 Javascript
jquery实现炫酷的叠加层自动切换特效
2015/02/01 Javascript
JavaScript中逗号运算符介绍及使用示例
2015/03/13 Javascript
浅析node连接数据库(express+mysql)
2015/11/30 Javascript
javascript实现html页面之间参数传递的四种方法实例分析
2015/12/15 Javascript
原生js编写autoComplete插件
2016/04/13 Javascript
jQuery调用Webservice传递json数组的方法
2016/08/06 Javascript
浅谈js中function的参数默认值
2017/02/20 Javascript
微信小程序 template模板详解及实例
2017/02/21 Javascript
原生JS实现列表子元素顺序反转的方法分析
2018/07/02 Javascript
vue代理和跨域问题的解决
2018/07/18 Javascript
vue项目中引入Sass实例方法
2019/08/27 Javascript
2分钟实现一个Vue实时直播系统的示例代码
2020/06/05 Javascript
使用Python的web.py框架实现类似Django的ORM查询的教程
2015/05/02 Python
pyenv命令管理多个Python版本
2017/03/26 Python
Python中的is和==比较两个对象的两种方法
2017/09/06 Python
Python序列对象与String类型内置方法详解
2019/10/22 Python
Python+OpenCV实现图像的全景拼接
2020/03/05 Python
学习Python列表的基础知识汇总
2020/03/10 Python
ddl,dml和dcl的含义
2016/05/08 面试题
社区党总支书记先进事迹材料
2014/01/24 职场文书
教代会闭幕词
2015/01/28 职场文书
结婚通知短信怎么写
2015/04/17 职场文书
少先队中队工作总结
2015/08/14 职场文书
《藏戏》教学反思
2016/02/23 职场文书
vue实现同时设置多个倒计时
2021/05/20 Vue.js
PyQt5结合QtDesigner实现文本框读写操作
2021/06/11 Python
Go遍历struct,map,slice的实现
2021/06/13 Golang