Redirect to Custom Form page before successful signup

耗尽温柔 提交于 2020-02-04 20:40:02

问题


During Facebook Signup, I need to store user mobile number (required field). How can I achieve that?

I tried to implement this via signal but I couldn't able to redirect page to required template. Though it isn't recommended.

@receiver(user_signed_up)
def user_signed_up_(request, user, sociallogin=None, **kwargs):
    '''
     When a social account is created successfully and this signal is received,
     django-allauth passes in the sociallogin param, giving access to metadata on the remote account, e.g.:
    '''

    if sociallogin:

        if sociallogin.account.provider == 'facebook':
            user.first_name = sociallogin.account.extra_data['first_name']
            user.last_name = sociallogin.account.extra_data['last_name']
            user.username = sociallogin.account.extra_data['username']
            user.email = sociallogin.account.extra_data['email']
            print "%s => %s => %s" % (user.first_name, user.last_name, user.email)
            form = FacebookForm(
                {
                    "first_name": request.user.first_name,
                    "last_name": request.user.last_name,
                    "username": request.user.username,
                    "email": request.user.email,
                    "mobile_number": " "
                })
            user.save()
            #don't return value (below line don't work
            return render(request, "authentication/signup_form.html", {"form": form})

Using AccountAdapter, user can able to bypass form via changing url at address bar.

class AccountAdapter(DefaultAccountAdapter):

        def get_login_redirect_url(self, request):
        # if request.user.last_login == request.user.date_joined:

            form = FacebookForm({"first_name": request.user.first_name,
                                 "last_name": request.user.last_name,
                                 "username": request.user.username,
                                 "email": request.user.email})
            print form
            return '/signup/'

forms.py

from django import forms


class FacebookForm(forms.Form):
    first_name = forms.CharField(30, required=True)
    last_name = forms.CharField(30, required=True)
    username = forms.CharField(30, required=True)
    email = forms.EmailField(required=True)
    mobile_number = forms.CharField(15, required=True)

urls.py

...
url(r'^signup/', 'authentication.views.index', name="signup"),
...

authentication/signup_form.html

{% block main_content %}
<h1>After Facebook Login</h1>
    {% if form %}
        <form method="post" action=".">
        {% csrf_token %}
            {{ form.as_p }}
            <input value="Submit" type="submit">
        </form>
    {% endif %}
{% endblock %}

What I need is similar to eatwith.com

来源:https://stackoverflow.com/questions/24885732/redirect-to-custom-form-page-before-successful-signup

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!