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 18 Python
Python获取Redis所有Key以及内容的方法
Feb 19 Python
python如何实现视频转代码视频
Jun 17 Python
对Python生成器、装饰器、递归的使用详解
Jul 19 Python
在python中实现同行输入/接收多个数据的示例
Jul 20 Python
Python Selenium 之数据驱动测试的实现
Aug 01 Python
查看端口并杀进程python脚本代码
Dec 17 Python
pytorch::Dataloader中的迭代器和生成器应用详解
Jan 03 Python
python 引用传递和值传递详解(实参,形参)
Jun 05 Python
如何用Matlab和Python读取Netcdf文件
Feb 19 Python
简单介绍Python的第三方库yaml
Jun 18 Python
pytorch中的 .view()函数的用法介绍
Mar 17 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
Linux下安装PHP MSSQL扩展教程
2014/10/24 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
PHP simplexml_load_string()函数实例讲解
2019/02/03 PHP
laravel通过a标签从视图向控制器实现传值
2019/10/15 PHP
通过jquery的$.getJSON做一个跨域ajax请求试验
2011/05/03 Javascript
JS 表单验证大全
2011/11/23 Javascript
DIV+CSS+JS不间断横向滚动实现代码
2013/03/19 Javascript
JavaScript打印iframe内容示例代码
2013/08/20 Javascript
原生JavaScript编写俄罗斯方块
2015/03/30 Javascript
AngularJS在IE8的不支持的解决方法
2016/05/13 Javascript
文本框只能输入数字的实现方法(兼容IE火狐)
2016/06/25 Javascript
利用iscroll4实现轮播图效果实例代码
2017/01/11 Javascript
vue组件间通信子与父详解(二)
2017/11/07 Javascript
使用watch在微信小程序中实现全局状态共享
2019/06/03 Javascript
浅入深出Vue之组件使用
2019/07/11 Javascript
JavaScript 常见的继承方式汇总
2020/09/17 Javascript
JS中循环遍历数组的四种方式总结
2021/01/23 Javascript
python设置windows桌面壁纸的实现代码
2013/01/28 Python
python脚本实现xls(xlsx)转成csv
2016/04/10 Python
wxpython中自定义事件的实现与使用方法分析
2016/07/21 Python
浅谈Python2获取中文文件名的编码问题
2018/01/09 Python
python实现一个简单的udp通信的示例代码
2019/02/01 Python
在pycharm中显示python画的图方法
2019/08/31 Python
Python如何基于Tesseract实现识别文字功能
2020/06/05 Python
python 浮点数四舍五入需要注意的地方
2020/08/18 Python
python模块内置属性概念及实例
2021/02/18 Python
纯css3无js实现的Android Logo(有简单动画)
2013/01/21 HTML / CSS
巴西最大的家具及装饰用品店:Mobly
2017/10/11 全球购物
销售代表求职自荐信
2013/10/01 职场文书
经济类毕业生求职信
2014/06/26 职场文书
法定授权委托证明书
2014/09/27 职场文书
财务助理岗位职责范本
2014/10/09 职场文书
社区挂职锻炼个人工作总结
2015/10/23 职场文书
python删除csv文件的行列
2021/04/06 Python
Python数据清洗工具之Numpy的基本操作
2021/04/22 Python
Java9新特性之Module模块化编程示例演绎
2022/03/16 Java/Android