Как получить доступ к именам пользователей и профилям с помощью django-allauth

Я использую Django с django-allauth для социальной аутентификации.

У меня установлена ​​аутентификация, но кто-нибудь может привести простые примеры того, как:

  • показать имя и аватар пользователя, вошедшего в систему
  • добавить некоторую информацию в учетную запись пользователя?

Например, на главной странице у меня есть

{% if user.is_authenticated %}
<li><a href="{% url account_logout %}?next=/">Logout</a></li>
{% endif %}

Это правильно показывает ссылку "Выйти", но как добавить имя пользователя и аватар?

Что-то вроде (псевдокод):

<p>You're logged in with {{ user.account_provider? }} as {{ user }}.</p>
<img src="{{ user.avatar_url }}" />

Затем, если я хочу добавить дополнительные свойства в профиль пользователя, что мне делать? Должен ли я использовать какое-либо другое пользовательское приложение Django?

Спасибо за вашу помощь.

4 ответа

SocialAccount Экземпляр модели доступен для пользователей, которые зарегистрировались с помощью своей социальной учетной записи.

В своем шаблоне вы можете просто написать:

URL аватара: {{ user.socialaccount_set.all.0.get_avatar_url }}
UID: {{ user.socialaccount_set.all.0.uid }}
Дата регистрации: {{ user.socialaccount_set.all.0.date_joined}}
Последний Войти: {{ user.socialaccount_set.all.0.last_login}}

И для ФИО: {{ user.socialaccount_set.all.0.extra_data.name }}

Для получения дополнительной информации: Джанго Аллах источник

Если вы посмотрите на источник Джанго-Аллаута https://github.com/pennersr/django-allauth/blob/master/allauth/socialaccount/models.py

Это абстрактная модель, которая представляет все методы, которые есть у всех других конкретных сервисных моделей. Таким образом, вы могли бы написать

<p>You're logged in with {{ user.get_provider }} as {{ user }}.</p>
<img src="{{ user.get_avatar_url }}" />

Вы можете сделать цикл for в наборе socialaccount в Foreignkey для класса пользователя, в шаблоне это примерно так:

{% for account in user.socialaccount_set.all %}

 {% comment %} show avatar from url {% endcomment %}
 <h2 style="text-transform:capitalize;">{{ account.provider }} account data</h2>

 <p><img width="50" height="50" src="{{ account.get_avatar_url }}"/></p>

 <p>UID: <a href="{{ account.extra_data.link }}">{{ account.uid }}</a></p>

 <p>Username: {{ account.extra_data.username }}</p>

  <p>First Name: {{ account.extra_data.first_name }}</p>

  <p>Last Name: {{ account.extra_data.last_name }}</p>

  <p>Dashboard Link: 
  <a href="{{ account.extra_data.link }}">{{ account.extra_data.link }}</a></p>
  {% empty %}
  <p>you haven't any social account please</p>
{% endfor %}

Итак, вчера я тоже получил запас здесь, я обошел Интернет в поисках решения, но ни одно из них не выглядело столь же понятным, как то, что я придумал ... После установки и настройки пакета allauth я сделал следующее:

  1. создать файл signal.py в каталоге приложения

  2. Внутри вашего venv найдите пакет allauth

  3. Затем перейдите к allauth/socialaccount/models.py.

  4. Таким образом, вы сможете лучше понять, как получать модели из пакета allauth или вызывать другие функции и классы.

  5. В app/signal.py сделайте следующее:

             from django.db.models.signals import post_save;p0-
     from django.dispatch import receiver
     from .models import Profile
     from allauth.socialaccount.models import SocialAccount# step 3 made this possible
     from django.contrib.auth.models import User
    
     @receiver(post_save, sender = SocialAccount)
     def create_profile(sender, instance, created, **kwargs):
        if created:
           # Grabbing data from social account to create profile for that user
           profile=Profile(
                  user=instance.user,
                  photo=instance.extra_data['picture']
                          )
           profile.save()
         else:
        # Do something else
    

Вы видите, что отправителем сигнала является модель «SocialAccount», потому что эта модель всегда создается во время аутентификации, затем возьмите поле «extra_data», которое является словарем, а затем ключ «['picture']» из объекта JSON. в поле "extra_data"... Надеюсь, это сработает для вас. Спасибо

Таким образом, вы можете получить значения изображения, а также назначить пользователю профиль.

Другие вопросы по тегам