问题
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