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创建系统目录的方法
Mar 11 Python
python字符串编码识别模块chardet简单应用
Jun 15 Python
python开发之str.format()用法实例分析
Feb 22 Python
python利用Guetzli批量压缩图片
Mar 23 Python
神经网络理论基础及Python实现详解
Dec 15 Python
python3实现windows下同名进程监控
Jun 21 Python
python 反向输出字符串的方法
Jul 16 Python
Python测试网络连通性示例【基于ping】
Aug 03 Python
Django用户认证系统 Web请求中的认证解析
Aug 02 Python
python GUI库图形界面开发之PyQt5工具栏控件QToolBar的详细使用方法与实例
Feb 28 Python
Ubuntu中配置TensorFlow使用环境的方法
Apr 21 Python
python实现邮件循环自动发件功能
Sep 11 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中使用preg_match_all匹配文章中的图片
2013/02/06 PHP
Thinkphp5.0自动生成模块及目录的方法详解
2017/04/17 PHP
BOOM vs RR BO3 第一场2.13
2021/03/10 DOTA
根据对象的某一属性进行排序的js代码(如:name,age)
2010/08/10 Javascript
JavaScript中把数字转换为字符串的程序代码
2013/06/19 Javascript
javascript同页面多次调用弹出层具体实例代码
2013/08/16 Javascript
window.navigate 与 window.location.href 的使用区别介绍
2013/09/21 Javascript
JS动态增加删除UL节点LI及相关内容示例
2014/05/21 Javascript
详解JavaScript中void语句的使用
2015/06/04 Javascript
javascript实现全角半角检测的方法
2015/07/23 Javascript
下一代Bootstrap的5个特点 超酷炫!
2016/06/17 Javascript
微信小程序通过api接口将json数据展现到小程序示例
2017/01/20 Javascript
浅谈regExp的test方法取得的值变化的原因及处理方法
2017/03/01 Javascript
jQuery插件HighCharts实现的2D回归直线散点效果示例【附demo源码下载】
2017/03/09 Javascript
详解如何在Angular中快速定位DOM元素
2017/05/17 Javascript
nodejs接入阿里大鱼短信验证码的方法
2017/07/10 NodeJs
js is_valid_filename验证文件名的函数
2017/07/19 Javascript
深入理解node.js http模块
2018/01/24 Javascript
vue中添加mp3音频文件的方法
2018/03/02 Javascript
通过循环优化 JavaScript 程序
2019/06/24 Javascript
深入理解Vue keep-alive及实践总结
2019/08/21 Javascript
JavaScript遍历数组的方法代码实例
2020/01/14 Javascript
Vue 基于 vuedraggable 实现选中、拖拽、排序效果
2020/05/18 Javascript
微信小程序反编译的实现
2020/12/10 Javascript
原生JS实现拖拽功能
2020/12/16 Javascript
python使用三角迭代计算圆周率PI的方法
2015/03/20 Python
Python实现批量下载文件
2015/05/17 Python
浅谈Python 字符串格式化输出(format/printf)
2016/07/21 Python
python获取命令行输入参数列表的实例代码
2018/06/23 Python
django获取from表单multiple-select的value和id的方法
2019/07/19 Python
python 读取修改pcap包的例子
2019/07/23 Python
CSS3 开发工具收集
2010/04/17 HTML / CSS
机械工程师的岗位职责
2013/11/17 职场文书
博士研究生自我鉴定范文
2013/12/04 职场文书
迎客户欢迎词三篇
2019/09/27 职场文书
Python源码解析之List
2021/05/21 Python