Как получить доступ к именам пользователей и профилям с помощью 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 я сделал следующее:
создать файл signal.py в каталоге приложения
Внутри вашего venv найдите пакет allauth
Затем перейдите к allauth/socialaccount/models.py.
Таким образом, вы сможете лучше понять, как получать модели из пакета allauth или вызывать другие функции и классы.
В 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"... Надеюсь, это сработает для вас. Спасибо
Таким образом, вы можете получить значения изображения, а также назначить пользователю профиль.