python,Django实现的淘宝客登录功能示例
本文实例讲述了python,Django实现的淘宝客登录功能。分享给大家供大家参考,具体如下:
在整理python,django资料的时候,发现了这个东西,也许是当初某位网友或者朋友发过来参考或者一起探讨修改的东西,现在不记得了,也许taobao的接口都变了也有可能,但总体来说还是有参考价值的,主要是做淘宝客客或者返利网会用到taobao登录而用的.
参考代码如下:
#!/usr/bin/python #coding:utf-8 importdatetime,urllib,base64,random fromhashlibimportmd5 fromdjango.confimportsettings fromdjango.contribimportauth fromdjango.contrib.auth.modelsimportUser fromdjango.core.urlresolversimportreverse fromdjango.httpimportHttpResponseRedirect fromdjango.shortcutsimportrender fromapp.taobao.backendsimportTaobaoBackend fromapp.taobao.modelsimportUserastaobao_user fromapp.taobao.formsimportUserOnceChange frompyapi.taobao.topimportRequest defauthenticated(request,template): ifrequest.method=='POST': form=UserOnceChange(request=request,data=request.POST) ifform.is_valid(): request.user.username=form.cleaned_data['username'] password=form.cleaned_data.get('password',None) ifpassword: 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() returnHttpResponseRedirect(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)) #解析topparameters iftop_parameters: back_parameters=base64.decodestring(urllib.unquote(top_parameters)) infos=dict(k.split("=")forkinback_parameters.split("&")) username=infos.get('visitor_nick',None) visitor_id=infos.get("visitor_id",None) #validatesign认证返回值中的签名 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()) #注意base64encode后,字符串最后会有\n符,因此需要清除才能验证 iftop_sign==local_sign.strip():#清除\n #创建/返回淘宝账户 tb_user,tb_user_created=taobao_user.objects.get_or_create(id=int(visitor_id), nick=username) #建立系统用户,用户名存在则创建随机数扩展 iftb_user.user_idisNone: 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) ifdjango_user_created: django_user.set_password(visitor_id) django_user.save() tb_user.user=django_user #保存返回的信息:过期时间tokents等 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() #updateuserprofileintaobaoauthbackend user=auth.authenticate(id=tb_user.id,nick=tb_user.nick) ifuser: auth.login(request,user) #如果应用账户没有绑定系统用户,则用户第一次时可以修改用户名 ifnottb_user.has_bind_user: form=UserOnceChange(request=request, initial={'username':tb_user.user.username, 'password':tb_user.id}) returnrender(request,template,locals()) returnHttpResponseRedirect(settings.TAOBAO_AUTH_URL)
希望本文所述对大家基于Django框架的Python程序设计有所帮助。