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使用scrapy采集数据过程中放回下载过大页面的方法
Apr 08 Python
简单解析Django框架中的表单验证
Jul 17 Python
利用python操作SQLite数据库及文件操作详解
Sep 22 Python
深入理解python中函数传递参数是值传递还是引用传递
Nov 07 Python
tensorflow 获取变量&打印权值的实例讲解
Jun 14 Python
使用NumPy和pandas对CSV文件进行写操作的实例
Jun 14 Python
解决Pytorch训练过程中loss不下降的问题
Jan 02 Python
tensorflow2.0与tensorflow1.0的性能区别介绍
Feb 07 Python
浅谈Keras中shuffle和validation_split的顺序
Jun 19 Python
Python3基于print打印带颜色字符串
Jul 06 Python
Python如何测试stdout输出
Aug 10 Python
Python实现迪杰斯特拉算法过程解析
Sep 18 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
第五节--克隆
2006/11/16 PHP
php下防止单引号,双引号在接受页面转义的设置方法
2008/09/25 PHP
PHP和.net中des加解密的实现方法
2013/02/27 PHP
php实现图片上传时添加文字和图片水印技巧
2020/04/18 PHP
PHP实践教程之过滤、验证、转义与密码详解
2017/07/24 PHP
php如何利用pecl安装mongodb扩展详解
2019/01/09 PHP
laravel config文件配置全局变量的例子
2019/10/13 PHP
JS 判断undefined的实现代码
2009/11/26 Javascript
javascript中的new使用
2010/03/20 Javascript
javascript 拷贝节点cloneNode()使用介绍
2014/04/03 Javascript
jQuery实现自动滚动到页面顶端的方法
2015/05/22 Javascript
JavaScript数据结构之单链表和循环链表
2017/11/28 Javascript
webpack4 SCSS提取和懒加载的示例
2018/09/03 Javascript
JavaScript中的"=、==、==="区别讲解
2019/01/22 Javascript
JS+php后台实现文件上传功能详解
2019/03/02 Javascript
使用weixin-java-miniapp配置进行单个小程序的配置详解
2019/03/29 Javascript
Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)
2019/04/17 Javascript
详解wepy开发小程序踩过的坑(小结)
2019/05/22 Javascript
js时间转换毫秒的实例代码
2019/08/21 Javascript
Python之父谈Python的未来形式
2016/07/01 Python
python保存二维数组到txt文件中的方法
2018/11/15 Python
Python模块的制作方法实例分析
2019/12/21 Python
python上下文管理器异常问题解决方法
2021/02/07 Python
蒂芙尼澳大利亚官方网站:Tiffany&Co. Australia
2017/08/27 全球购物
Sasa莎莎海外旗舰店:香港莎莎美妆平台
2018/03/21 全球购物
四年的大学生生活自我评价
2013/12/09 职场文书
中职生自荐信范文
2014/06/15 职场文书
2014年个人思想工作总结
2014/11/27 职场文书
工作检讨书范文
2015/01/23 职场文书
中国合伙人观后感
2015/06/02 职场文书
会议营销主持词
2015/07/03 职场文书
jQuery实现影院选座订座效果
2021/04/13 jQuery
解决Python字典查找报Keyerror的问题
2021/05/26 Python
Java使用httpRequest+Jsoup爬取红蓝球号码
2021/07/02 Java/Android
MongoDB日志切割的三种方式总结
2021/09/15 MongoDB
《艾尔登法环》Boss腐烂树灵很有可能是《黑暗之魂3》的一个废案
2022/04/11 其他游戏