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 含参构造函数实例详解
May 25 Python
利用Django内置的认证视图实现用户密码重置功能详解
Nov 24 Python
Python中的groupby分组功能的实例代码
Jul 11 Python
Python Tkinter模块实现时钟功能应用示例
Jul 23 Python
python 应用之Pycharm 新建模板默认添加编码格式-作者-时间等信息【推荐】
Jun 17 Python
python 含子图的gif生成时内存溢出的方法
Jul 07 Python
Python 如何定义匿名或内联函数
Aug 01 Python
python3将变量输入的简单实例
Aug 19 Python
python调用win32接口进行截图的示例
Nov 11 Python
opencv+pyQt5实现图片阈值编辑器/寻色块阈值利器
Nov 13 Python
python用700行代码实现http客户端
Jan 14 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
Feb 03 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语法速查表
2006/12/06 PHP
session在PHP大型web应用中的使用
2011/06/25 PHP
php输出echo、print、print_r、printf、sprintf、var_dump的区别比较
2013/06/21 PHP
PHP采用get获取url汉字出现乱码的解决方法
2014/11/13 PHP
PHP中大于2038年时间戳的问题处理方案
2015/03/03 PHP
PHP实现打包zip并下载功能
2018/06/12 PHP
php中的buffer缓冲区用法分析
2019/05/31 PHP
关于PHP中interface的用处详解
2020/07/26 PHP
IE 上下滚动展示模仿Marquee机制
2009/12/20 Javascript
JQuery从头学起第一讲
2010/07/04 Javascript
值得分享的Bootstrap Ace模板实现菜单和Tab页效果
2015/12/30 Javascript
jquery实现简单的banner轮播效果【实例】
2016/03/30 Javascript
基于Vuejs和Element的注册插件的编写方法
2017/07/03 Javascript
浅析JavaScript中的特殊数据类型
2017/12/15 Javascript
JavaScript事件委托原理与用法实例分析
2018/06/07 Javascript
React中如何引入Angular组件详解
2018/08/09 Javascript
谈谈JavaScript中super(props)的重要性
2019/02/12 Javascript
12个提高JavaScript技能的概念(小结)
2019/05/09 Javascript
利用JavaScript将Excel转换为JSON示例代码
2019/06/14 Javascript
如何使用Jquery动态生成二级选项列表
2020/02/06 jQuery
Python3.6简单反射操作示例
2018/06/14 Python
对Python协程之异步同步的区别详解
2019/02/19 Python
[机器视觉]使用python自动识别验证码详解
2019/05/16 Python
Python批量查询关键词微信指数实例方法
2019/06/27 Python
python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法
2020/02/26 Python
设计师大码女装:11 Honoré
2020/05/03 全球购物
空指针到底是什么
2012/08/07 面试题
25道Java面试题集合
2013/05/21 面试题
2013年学期结束动员演讲稿
2014/01/07 职场文书
2014群众路线学习笔记
2014/11/06 职场文书
出纳试用期自我评价
2015/03/10 职场文书
毕业班班主任工作总结2015
2015/07/23 职场文书
2016年优秀教师先进事迹材料
2016/02/26 职场文书
详解Python函数print用法
2021/06/18 Python
CSS中妙用 drop-shadow 实现线条光影效果
2021/11/11 HTML / CSS
Vue.Draggable实现交换位置
2022/04/07 Vue.js