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多线程抓取代理服务器IP地址的示例
Nov 09 Python
Python聚类算法之基本K均值实例详解
Nov 20 Python
举例简单讲解Python中的数据存储模块shelve的用法
Mar 03 Python
Python实现二分查找与bisect模块详解
Jan 13 Python
分享一个简单的python读写文件脚本
Nov 25 Python
python3实现基于用户的协同过滤
May 31 Python
浅谈python多进程共享变量Value的使用tips
Jul 16 Python
python列表每个元素同增同减和列表元素去空格的实例
Jul 20 Python
python基于json文件实现的gearman任务自动重启代码实例
Aug 13 Python
使用python代码进行身份证号校验的实现示例
Nov 21 Python
keras导入weights方式
Jun 12 Python
Python 数据可视化之Seaborn详解
Nov 02 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里得到前天和昨天的日期的代码
2007/08/16 PHP
PHP实现的简单缓存类
2015/07/29 PHP
原生PHP实现导出csv格式Excel文件的方法示例【附源码下载】
2019/03/07 PHP
PHP实现的抓取小说网站内容功能示例
2019/06/27 PHP
与jquery serializeArray()一起使用的函数,主要来方便提交表单
2011/01/31 Javascript
Javascript判断对象是否相等实现代码
2013/03/18 Javascript
调用HttpHanlder的几种返回方式小结
2013/12/20 Javascript
jquery.cookie.js使用指南
2015/01/05 Javascript
JS扩展方法实例分析
2015/04/15 Javascript
js+css实现的圆角边框TAB选项卡滑动门代码分享(2款)
2015/08/26 Javascript
js获取页面及个元素高度、宽度的代码
2016/04/26 Javascript
jQuery Easyui datagrid/treegrid 清空数据
2016/07/09 Javascript
JavaScript中创建对象的7种模式详解
2017/02/21 Javascript
js学习总结_基于数据类型检测的四种方式(必看)
2017/07/04 Javascript
NodeJs 文件系统操作模块fs使用方法详解
2018/11/26 NodeJs
生产制造追溯系统之再说条码打印
2019/06/03 Javascript
layui自己添加图片按钮并点击跳转页面的例子
2019/09/14 Javascript
JS字符串和数组如何实现相互转化
2020/07/02 Javascript
[39:18]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第二场 12.17
2020/12/19 DOTA
利用Python的Django框架生成PDF文件的教程
2015/07/22 Python
简单学习Python time模块
2016/04/29 Python
Python的Tornado框架的异步任务与AsyncHTTPClient
2016/06/27 Python
python程序封装为win32服务的方法
2021/03/07 Python
python Pexpect 实现输密码 scp 拷贝的方法
2019/01/03 Python
三步实现Django Paginator分页的方法
2019/06/11 Python
python 定时器每天就执行一次的实现代码
2019/08/14 Python
Python bytes string相互转换过程解析
2020/03/05 Python
什么是静态路由?什么是动态路由?各自的特点是什么?
2015/09/16 面试题
药剂学专业应届生自荐信
2013/09/29 职场文书
护理专业毕业生自荐书
2014/05/24 职场文书
工作批评与自我批评范文
2014/10/16 职场文书
滞留工资返还协议书
2014/10/19 职场文书
关于安全的广播稿
2014/10/23 职场文书
亮剑观后感300字
2015/06/05 职场文书
python 如何做一个识别率百分百的OCR
2021/05/29 Python
OpenCV图像变换之傅里叶变换的一些应用
2021/07/26 Python