python,Django实现的淘宝客登录功能示例

 更新时间:2019年06月12日 10:27:19   作者:轻舞肥羊   我要评论

这篇文章主要介绍了python,Django实现的淘宝客登录功能,结合实例形式分析了Django框架基于淘宝接口的登录功能相关操作技巧,需要的朋友可以参考下

本文实例讲述了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进阶之切片的误区与高级用法

    切片(slice)就是一种截取索引片段的技术,借助切片技术,我们可以十分灵活地处理序列类型的对象。这篇文章主要介绍了Python进阶之切片的误区与高级用法,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • Python cookbook(数据结构与算法)将名称映射到序列元素中的方法

    Python cookbook(数据结构与算法)将名称映射到序列元素中的方法

    这篇文章主要介绍了Python cookbook(数据结构与算法)将名称映射到序列元素中的方法,结合实例形式分析了Python使用collections.namedtuple()进行元组命名相关操作技巧,需要的朋友可以参考下
    2018-03-03
  • python抓取网页时字符集转换问题处理方案分享

    python抓取网页时字符集转换问题处理方案分享

    python学习过程中发现英文不好学起来挺困难的,其中小弟就遇到一个十分蛋疼的问题,百度了半天就没找到解决办法~囧~摸索了半天自己解决了,记录下来与君共勉。
    2014-06-06
  • Python 2.7中文显示与处理方法

    Python 2.7中文显示与处理方法

    今天小编就为大家分享一篇Python 2.7中文显示与处理方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • python避免死锁方法实例分析

    python避免死锁方法实例分析

    这篇文章主要介绍了python避免死锁方法,较为详细的分析了死锁的成因与避免形成死锁的方法,需要的朋友可以参考下
    2015-06-06
  • python读取文本中的坐标方法

    python读取文本中的坐标方法

    今天小编就为大家分享一篇python读取文本中的坐标方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • python更新列表的方法

    python更新列表的方法

    这篇文章主要介绍了python更新列表的方法,实例分析了Python列表赋值的相关技巧,需要的朋友可以参考下
    2015-07-07
  • Python 命令行参数sys.argv

    Python 命令行参数sys.argv

    命令行参数是通过sys.argv[]来获取的,sys.argv[0]是代码文件本身的路径,因此参数是从1开始的。比如设置参数为: spe
    2008-09-09
  • Python语法快速入门指南

    Python语法快速入门指南

    这篇文章主要介绍了Python语法快速入门指南,包括注释和引号的使用等基本语法知识,需要的朋友可以参考下
    2015-10-10
  • 对python读写文件去重、RE、set的使用详解

    对python读写文件去重、RE、set的使用详解

    今天小编就为大家分享一篇对python读写文件去重、RE、set的使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12

最新评论