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 httplib,smtplib使用方法
Sep 06 Python
python实现的二叉树算法和kmp算法实例
Apr 25 Python
Python使用内置json模块解析json格式数据的方法
Jul 20 Python
Pandas 对Dataframe结构排序的实现方法
Apr 10 Python
python中virtualenvwrapper安装与使用
May 20 Python
python3中函数参数的四种简单用法
Jul 09 Python
Python二进制文件读取并转换为浮点数详解
Jun 25 Python
python中class的定义及使用教程
Sep 18 Python
Python for循环与getitem的关系详解
Jan 02 Python
python爬虫开发之PyQuery模块详细使用方法与实例全解
Mar 09 Python
浅谈OpenCV中的新函数connectedComponentsWithStats用法
Jul 05 Python
详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库
Jan 24 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
ThinkPHP之R方法实例详解
2014/06/20 PHP
js 多种变量定义(对象直接量,数组直接量和函数直接量)
2010/05/24 Javascript
javascript返回顶部效果(自写代码)
2013/01/06 Javascript
jQuery-ui引入后Vs2008的无智能提示问题解决方法
2014/02/10 Javascript
JavaScript基于ajax编辑信息用法实例
2015/07/15 Javascript
jquery图片滚动放大代码分享(2)
2015/08/28 Javascript
如何使用jquery修改css中带有!important的样式属性
2016/04/28 Javascript
jQuery实现二维码扫描功能
2017/01/09 Javascript
jQuery插件echarts实现的多折线图效果示例【附demo源码下载】
2017/03/04 Javascript
JS实现多张图片预览同步上传功能
2017/06/23 Javascript
使用vue-cli编写vue插件的方法
2018/02/26 Javascript
详解@angular/cli 改变默认启动端口两种方式
2018/11/29 Javascript
vue-test-utils初使用详解
2019/05/23 Javascript
如何使用JavaScript实现栈与队列
2019/06/24 Javascript
微信小程序实现多张图片上传功能
2020/11/18 Javascript
python+pandas分析nginx日志的实例
2018/04/28 Python
python实现对指定字符串补足固定长度倍数截断输出的方法
2018/11/15 Python
Python3爬虫学习之应对网站反爬虫机制的方法分析
2018/12/12 Python
Python学习笔记之Zip和Enumerate用法实例分析
2019/08/14 Python
浅谈pytorch torch.backends.cudnn设置作用
2020/02/20 Python
Python Django搭建网站流程图解
2020/06/13 Python
Python sklearn中的.fit与.predict的用法说明
2020/06/28 Python
基于Python正确读取资源文件
2020/09/14 Python
python 实现图片修复(可用于去水印)
2020/11/19 Python
纯CSS3打造动感漂亮时尚的扇形菜单
2014/03/18 HTML / CSS
节水标语大全
2014/06/11 职场文书
股东出资证明书范例
2014/10/04 职场文书
付款承诺函范文
2015/01/21 职场文书
全国爱眼日活动总结
2015/02/27 职场文书
2015年银行工作总结范文
2015/04/01 职场文书
重温入党誓词主持词
2015/06/29 职场文书
小学中队长竞选稿
2015/11/20 职场文书
学习《中小学教师职业道德规范》心得体会
2016/01/18 职场文书
2016学习全国教书育人楷模先进事迹心得体会
2016/01/21 职场文书
《揠苗助长》教学反思
2016/02/20 职场文书
单机多实例部署 MySQL8.0.20
2022/05/15 MySQL