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中的数据对象持久化存储模块pickle的使用示例
Mar 03 Python
Python 通过pip安装Django详细介绍
Apr 28 Python
Python实现的文本对比报告生成工具示例
May 22 Python
解决Pycharm下面出现No R interpreter defined的问题
Oct 29 Python
浅析Python 中几种字符串格式化方法及其比较
Jul 02 Python
解决Django中调用keras的模型出现的问题
Aug 07 Python
Python Django 简单分页的实现代码解析
Aug 21 Python
pytorch AvgPool2d函数使用详解
Jan 03 Python
Keras搭建自编码器操作
Jul 03 Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
Aug 07 Python
如何用Python编写一个电子考勤系统
Feb 08 Python
Python Django获取URL中的数据详解
Nov 01 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数组查找函数in_array()、array_search()、array_key_exists()使用实例
2014/04/29 PHP
PHP 获取指定地区的天气实例代码
2017/02/08 PHP
查看源码的工具 学习jQuery源码不错的工具
2011/12/26 Javascript
JS上传图片前实现图片预览效果的方法
2015/03/02 Javascript
javascript中关于&& 和 || 表达式的小技巧分享
2015/04/10 Javascript
删除javascript所创建子节点的方法
2015/05/21 Javascript
JavaScript实现文本框中默认显示背景图片在获得焦点后消失的方法
2015/07/01 Javascript
jQuery代码实现对话框右上角菜单带关闭×
2016/05/03 Javascript
纯jQuery实现前端分页功能
2017/03/23 jQuery
AngularJS获取json数据的方法详解
2017/05/27 Javascript
js循环map 获取所有的key和value的实现代码(json)
2018/05/09 Javascript
微信小程序template模版的使用方法
2019/04/13 Javascript
JS实现给数组对象排序的方法分析
2019/06/24 Javascript
JavaScript展开操作符(Spread operator)详解
2019/07/20 Javascript
详解微信小程序图片地扯转base64解决方案
2019/08/18 Javascript
JavaScript enum枚举类型定义及使用方法
2020/05/15 Javascript
1 行 Python 代码快速实现 FTP 服务器
2018/01/25 Python
python连接mongodb密码认证实例
2018/10/16 Python
Python3非对称加密算法RSA实例详解
2018/12/06 Python
Python实现插入排序和选择排序的方法
2019/05/12 Python
利用Python实现kNN算法的代码
2019/08/16 Python
Django 实现将图片转为Base64,然后使用json传输
2020/03/27 Python
python pillow库的基础使用教程
2021/01/13 Python
专业实习自我鉴定
2013/10/29 职场文书
计算机专业毕业生求职信分享
2013/12/24 职场文书
秋季运动会表扬稿
2014/01/16 职场文书
市场营销求职信范文
2014/02/21 职场文书
材料工程专业毕业生求职信
2014/03/04 职场文书
监察建议书范文
2014/03/12 职场文书
工程承诺书怎么写
2014/05/24 职场文书
体育教育毕业生自荐信
2014/06/29 职场文书
药店采购员岗位职责
2014/09/30 职场文书
小学教学工作总结2015
2015/05/13 职场文书
公司宣传语大全
2015/07/13 职场文书
详解Nginx 被动检查服务器的存活状态
2021/10/16 Servers
Python使用socket去实现TCP客户端和TCP服务端
2022/04/12 Python