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

 更新时间:2019年06月12日 10:27:18   作者:轻舞肥羊  
这篇文章主要介绍了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使用openpyxl库修改excel表格数据方法

    python使用openpyxl库修改excel表格数据方法

    今天小编就为大家分享一篇python使用openpyxl库修改excel表格数据方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • python中关于对super()函数疑问解惑

    python中关于对super()函数疑问解惑

    Python中的super()是用于调用父类(或父类的父类...)方法的函数,主要用于多继承,单继承问题不大,下面这篇文章主要给大家介绍了关于python中关于对super()函数疑问解惑的相关资料,需要的朋友可以参考下
    2022-08-08
  • 全CPU并行处理Pandas操作Pandarallel更快处理数据

    全CPU并行处理Pandas操作Pandarallel更快处理数据

    我们在处理数据时,通常小的数据对处理速度不敏感,但数据量一大,顿时会感觉数据处理效率不尽如人意,今天介绍的pandarallel就是一个简单高效的Pandas并行工具,几行代码就可以提高数据处理效率,
    2024-01-01
  • 对python:循环定义多个变量的实例详解

    对python:循环定义多个变量的实例详解

    今天小编就为大家分享一篇对python:循环定义多个变量的实例详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • 使用Python VTK 完成图像切割

    使用Python VTK 完成图像切割

    这篇文章主要介绍了使用Python VTK 完成图像切割,文章内容基于python的相关资料展开对主题的详细介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-04-04
  • Python小白不正确的使用类变量实例

    Python小白不正确的使用类变量实例

    在本篇内容里,小编给各位整理了关于Python小白不正确的使用类变量实例内容,有兴趣的朋友们可以学习下。
    2020-05-05
  • 使用Python3 Boto3包删除AWS CloudFormation的栈(Stacks)

    使用Python3 Boto3包删除AWS CloudFormation的栈(Stacks)

    这篇文章主要介绍了如何使用Python3 Boto3删除AWS CloudFormation的栈(Stacks),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-01-01
  • 用python实现的去除win下文本文件头部BOM的代码

    用python实现的去除win下文本文件头部BOM的代码

    windows环境下新建或编辑文本文件,保存时会在头部加上BOM。使用ftp上传到linux下,在执行时第一行即报错。以下方法可以去除BOM头,有需要的朋友可以参考下
    2013-02-02
  • Python中yield关键字及与return的区别详解

    Python中yield关键字及与return的区别详解

    这篇文章主要介绍了Python中yield关键字及与return的区别详解,带有 yield 的函数在 Python 中被称之为 generator生成器,比如列表所有数据都在内存中,如果有海量数据的话将会非常耗内存,想要得到庞大的数据,又想让它占用空间少,那就用生成器,需要的朋友可以参考下
    2023-08-08
  • 深入浅出Python中三个图像增强库的使用

    深入浅出Python中三个图像增强库的使用

    这篇文章主要带大家了解一下Python中三个图像增强库的使用:Imgaug、Albumentations和SOLT,文中通过示例进行了详细介绍,需要的可以参考一下
    2022-05-05

最新评论