本文實例講述了python,django實現的淘寶客登錄功能。分享給大家供大家參考,具體如下:
在整理python,django資料的時候,發現了這個東西,也許是當初某位網友或者朋友發過來參考或者一起探討修改的東西,現在不記得了,也許taobao的接口都變了也有可能,但總體來說還是有參考價值的,主要是做淘寶客客或者返利網會用到taobao登錄而用的.
參考代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
#!/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程序設計有所幫助。
原文鏈接:http://www.yihaomen.com/article/python/531.htm