Django使用另一个函数

时间:2016-01-31 19:13:54

标签: python django python-social-auth

我正在使用自定义python-social-auth pipline构建应用程序,以便通过facebook登录。 情况非常简单,我需要将用户从非视图功能重定向到带参数的url。

以下是我的相关网址:

url(r'^.*', login, name = 'login'),
url(r'^logout/.*', logout, name = 'FBAuth.views.logout'),
url(r'^/new_user/.*', login, {'new_user':1}, name = 'new_user' ),
url(r'^succeeded/.*', login, {'new_user':2}, name = 'succeeded' ),
来自views.py的

def login(request, new_user=None):
    logger.debug("I'm in login view, new_user = %s", new_user)
    message = 'Welcome to application!'
    if new_user:
        if new_user == 1: #new one
            message = 'Wellcome to our app! Thanks for registration'
        else: 
            if new_user == 2: #loggined
                message = "Successfully logged in"
            else:
                message = new_user
    context = RequestContext(request, {
         'request': request, 'user': request.user, 'message' : message})
    return render_to_response('login.html', context_instance=context)

custom.py:

def check_if_exists(strategy,  request, *args, **kwargs):
    login_type = strategy.request.GET.get('login_type')

    if kwargs['is_new']:
        ...
        some code
        ...
    else:
        #if login_type == 2: 
            #raise AuthAlreadyAssociated          #need to add message
            new_user = 1
            #return redirect('/new_user/')
            #return redirect('/new_user/', {'new_user' : new_user} )
            return login(new_user=1)
            #return redirect(reverse('new_user'))
            #reverse('FBAuth.views.login', kwargs={'new_user' : new_user} ) #, new_user=new_user) #, args =(new_user,))
            #reverse(redirect_uri, args=(backend,))
    return None

这是我的身份验证管道:

SOCIAL_AUTH_PIPELINE = (
    'social.pipeline.social_auth.social_details',
    'social.pipeline.social_auth.social_uid',
    'social.pipeline.social_auth.auth_allowed',
    'social.pipeline.social_auth.social_user',
    'FBAuth.facebook.check_if_exists',     
    'social.pipeline.user.get_username',
    'social.pipeline.user.create_user',
    'social.pipeline.social_auth.associate_user',
    'social.pipeline.social_auth.load_extra_data',
    'social.pipeline.user.user_details',
)

url的pipelene cals:

 href="{% url 'social:begin' 'facebook' %}?next={{ request.path }}&login_type=return redirect('/new_user/1/')
"

我尝试了一百万个变种,没有任何作用。重定向总是失败,或者我在视图中得到new_user = None。

请帮我找一些传递参数的方法。

注意:我也试过了:

return redirect('/new_user/?new_user=1/')

url(r'^/new_user/(?P<new_user>)/$', login, name = 'new_user' ),

表示网址:

function weirdestFlatternEver(obj) {
    var res = [], name, value;
  for(name in obj) {
    value = obj[name];
    res.push(name);
    if(Array.isArray(value)) {
        res.push(value);
    }
    else {
        res.push.apply(res, weirdestFlatternEver(value));
    }

  }
  return res;
}

页面已打开,但没有消息(new_user in None)

1 个答案:

答案 0 :(得分:0)

我认为问题在于您处理网址的方式。

url(r'^/new_user/(?P<new_user>)/$', login, name = 'new_user' )

重定向时使用此功能。

return redirect('/new_user/1/')

未经测试。希望这会有所帮助。