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 相关文章推荐
200行自定义python异步非阻塞Web框架
Mar 15 Python
python3安装speech语音模块的方法
Dec 24 Python
python使用Plotly绘图工具绘制柱状图
Apr 01 Python
python tkinter图形界面代码统计工具(更新)
Sep 18 Python
Pytorch中实现只导入部分模型参数的方式
Jan 02 Python
PyTorch 解决Dataset和Dataloader遇到的问题
Jan 08 Python
python3检查字典传入函数键是否齐全的实例
Jun 05 Python
python如何提升爬虫效率
Sep 27 Python
浅析python 字典嵌套
Sep 29 Python
浅谈哪个Python库才最适合做数据可视化
Jun 28 Python
python中super()函数的理解与基本使用
Aug 30 Python
Python数组变形的几种实现方法
May 30 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+xslt在windows平台上
2006/10/09 PHP
php中目录,文件操作详谈
2007/03/19 PHP
php文件打包 下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
2012/06/13 PHP
php中instanceof 与 is_a()区别分析
2015/03/03 PHP
php生成不重复随机数、数组的4种方法分享
2015/03/30 PHP
Yii2如何批量添加数据
2016/05/17 PHP
laravel实现上传图片并在页面显示的例子
2019/10/14 PHP
再谈IE中Flash控件的自动激活 ObjectWrap
2007/03/09 Javascript
学习ExtJS TextField常用方法
2009/10/07 Javascript
javascript实现的像java、c#之类的sleep暂停的函数代码
2010/03/04 Javascript
jQuery模拟超链接点击效果代码
2013/04/21 Javascript
js父页面中使用子页面的方法
2016/01/09 Javascript
Ajax基础知识详解
2017/02/17 Javascript
Mongoose经常返回e11000 error的原因分析
2017/03/29 Javascript
javascript实现日期三级联动下拉框选择菜单
2020/12/03 Javascript
Vue.js对象转换实例
2017/06/07 Javascript
javascript编程开发中取色器及封装$函数用法示例
2017/08/09 Javascript
vue cli使用绝对路径引用图片问题的解决
2017/12/06 Javascript
从零开始最小实现react服务器渲染详解
2018/01/26 Javascript
百度地图去掉marker覆盖物或者去掉maker的label文字方法
2018/01/26 Javascript
Vue.js组件间通信方式总结【推荐】
2018/11/23 Javascript
javascript this指向相关问题及改变方法
2020/11/19 Javascript
pycharm新建一个python工程步骤
2019/07/16 Python
python Django中models进行模糊查询的示例
2019/07/18 Python
Django的用户模块与权限系统的示例代码
2019/07/24 Python
Python学习笔记之Break和Continue用法分析
2019/08/14 Python
Pycharm最常用的快捷键及使用技巧
2020/03/05 Python
Python自动化之UnitTest框架实战记录
2020/09/08 Python
详解使用HTML5的classList属性操作CSS类
2017/10/13 HTML / CSS
职业生涯规划书的格式
2013/12/29 职场文书
幼儿园教师师德师风演讲稿:我自豪我是一名幼师
2014/09/10 职场文书
领导班子专题民主生活会情况想汇报
2014/09/30 职场文书
单位委托书
2014/10/15 职场文书
个人查摆问题自查报告
2014/10/16 职场文书
springboot拦截器无法注入redisTemplate的解决方法
2021/06/27 Java/Android
win10系统计算机图标怎么调出来?win10调出计算机图标的方法
2022/08/14 数码科技