Я хочу добавить поле костюма после входа в социальное приложение django - PullRequest
0 голосов
/ 21 октября 2018

Привет, я разработчик php, новичок в python / django

Я создаю социальную учетную запись с помощью django, используя библиотеку 'social-auth-app-django', и для ее реализации я следовал следующему руководству.

https://simpleisbetterthancomplex.com/tutorial/2016/10/24/how-to-add-social-login-to-django.html

Работает нормально, но мне также нужно добавить файлы костюмов в базу данных, которая будет находиться в другой таблице, но будет добавлена ​​при создании нового пользователя.Я расширил таблицу пользователей следующим образом

from django.contrib.auth.models import User

class NewsCreator(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    CreatorLastLogs= models.CharField(max_length=100)
    CreatorLogs= models.CharField(max_length=100)

и хочу добавить данные в эти поля при создании нового пользователя или при входе существующих пользователей.Я попытался просмотреть документацию, но не смог найти ничего, что связано с расширением / настройкой кода и т. Д. Заранее спасибо

1 Ответ

0 голосов
/ 27 октября 2018

Привет, я нашел ответ на этот вопрос, поэтому я публикую сообщения для тех, кто позже наткнется на это сообщение.

django social предоставляет конвейер для расширения своего кода, и нам просто нужно расширить этот конвейер для этогов вашем файле setting.py опубликуйте следующий список (все в этом списке являются конвейерными методами по умолчанию, которые вызываются, кроме последнего).

SOCIAL_AUTH_PIPELINE = (
    'social_core.pipeline.social_auth.social_details',
    'social_core.pipeline.social_auth.social_uid',
    'social_core.pipeline.social_auth.auth_allowed',
    'social_core.pipeline.social_auth.social_user',
    'social_core.pipeline.user.get_username',
    'social_core.pipeline.user.create_user',
    'social_core.pipeline.social_auth.associate_user',
    'social_core.pipeline.social_auth.load_extra_data',
    'social_core.pipeline.user.user_details',
    'newsapp.pipeline.save_profile'<-- this is your method
)

создайте в вашем приложении файл с именем pipeline.py и именемметод должен быть указан в списке выше, как последняя строка в списке (newsapp - это имя моего приложения, укажите ваше имя приложения)

в вашем файле pipe.py

def save_profile(backend, user, response, *args, **kwargs):
    if NewsCreator.objects.filter(user_id=user.id).count() == 0 :
        newsCreator = NewsCreator.objects.create(user=user)
        //your logic for new fields 
        newsCreator.save()

, если у вас есть другиезапрос относительно django-social вы можете обратиться https://github.com/python-social-auth/social-docs его подробная документация

...