Example of Taobaoke login function implemented by python and Django
- 2021-06-28 09:36:06
- OfStack
This paper gives an example of Taobaoke login function implemented by python and Django.Share it for your reference, as follows:
When sorting out the python, django data, we found this thing. Maybe it was something that a netizen or friend sent to us at the beginning to refer to or discuss the modification. Now I can't remember, maybe the interface of taobao has changed, but it is still valuable in general, mainly for Taobao customers or Return to Return to use taobao to log in.
The reference code is as follows:
#!/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()
# Update application user bindings
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))
# analysis 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 Authenticate signatures in return values
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())
# Be careful base64 encode After that, the string ends up with \n Character, Cleanup is required to verify
if top_sign == local_sign.strip(): # Eliminate \n
# Establish / Return to Taobao Account
tb_user, tb_user_created = taobao_user.objects.get_or_create(id=int(visitor_id),
nick=username)
# Set up system users , Create Random Number Extensions if User Name Exists
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
# Save returned information: expiration time token ts etc.
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 the application account is not bound to a system user, then the user 1 User name can be modified at a later time
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)
I hope that the description in this paper will be helpful to everyone's Python program design based on the Django framework.