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中的getopt函数使用详解
Jul 28 Python
Python多维/嵌套字典数据无限遍历的实现
Nov 04 Python
浅谈用Python实现一个大数据搜索引擎
Nov 28 Python
Python实现使用卷积提取图片轮廓功能示例
May 12 Python
Python3.4解释器用法简单示例
Mar 22 Python
Python实现微信机器人的方法
Sep 06 Python
python pycharm的安装及其使用
Oct 11 Python
Python图像处理库PIL中图像格式转换的实现
Feb 26 Python
python里的单引号和双引号的有什么作用
Jun 17 Python
浅谈多卡服务器下隐藏部分 GPU 和 TensorFlow 的显存使用设置
Jun 30 Python
python判断变量是否为列表的方法
Sep 17 Python
Python hashlib模块的使用示例
Oct 09 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数组函数序列之array_search()- 按元素值返回键名
2011/11/04 PHP
PHP应用JSON技巧讲解
2013/02/03 PHP
php strrpos()与strripos()函数
2013/08/31 PHP
百度地图经纬度转换到腾讯地图/Google 对应的经纬度
2015/08/28 PHP
用PHP将Unicode 转化为UTF-8的实现方法(推荐)
2017/02/08 PHP
仅IE支持clearAttributes/mergeAttributes方法使用介绍
2012/05/04 Javascript
js 编码转换 gb2312 和 utf8 互转的2种方法
2013/08/07 Javascript
验证控件与Button的OnClientClick事件详细解析
2013/12/04 Javascript
利用JS解决ie6不支持max-width,max-height问题的方法
2014/01/02 Javascript
jquery中的常用事件bind、hover、toggle等示例介绍
2014/07/21 Javascript
jquery实现的用户注册表单提示操作效果代码分享
2015/08/28 Javascript
html、css和jquery相结合实现简单的进度条效果实例代码
2016/10/24 Javascript
完美实现js焦点轮播效果(一)
2017/03/07 Javascript
jquery.masonry瀑布流效果
2017/05/25 jQuery
vue-cli+webpack在生成的项目中使用bootstrap实例代码
2017/05/26 Javascript
vue动态设置img的src路径实例
2018/09/18 Javascript
layui复选框的全选与取消实现方法
2019/09/02 Javascript
JS数组的高级使用方法示例小结
2020/03/14 Javascript
vue2.0 watch里面的 deep和immediate用法说明
2020/10/30 Javascript
python脚本实现统计日志文件中的ip访问次数代码分享
2014/08/06 Python
python黑魔法之参数传递
2016/02/12 Python
浅析Python中的赋值和深浅拷贝
2017/08/15 Python
Python实现句子翻译功能
2017/11/14 Python
python 统计文件中的字符串数目示例
2019/12/24 Python
Python关键字及可变参数*args,**kw原理解析
2020/04/04 Python
Python中return函数返回值实例用法
2020/11/19 Python
python使用scapy模块实现ARP扫描的过程
2021/01/21 Python
python 图像增强算法实现详解
2021/01/24 Python
viagogo法国票务平台:演唱会、体育比赛、戏剧门票
2017/03/27 全球购物
测试工程师职业规划书
2014/02/06 职场文书
竞选班干部演讲稿600字
2014/08/20 职场文书
十佳少年事迹材料
2014/12/25 职场文书
行政申诉状范文
2015/05/20 职场文书
2015年宣传思想工作总结
2015/05/22 职场文书
Meta增速拉垮,元宇宙难当重任
2022/04/29 数码科技
css清除浮动clearfix:after的用法详解(附完整代码)
2023/05/21 HTML / CSS