如何使用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 个回答
1
你可以在用户类的外键中,对社交账户的集合使用一个循环。在模板中,它看起来像下面这样:
{% 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 %}
4
如果你查看django-allauth的源代码,地址是 https://github.com/pennersr/django-allauth/blob/master/allauth/socialaccount/models.py#L7
这里有一个抽象模型,它代表了所有其他具体服务模型所拥有的方法。因此,你可以这样写:
<p>You're logged in with {{ user.get_provider }} as {{ user }}.</p>
<img src="{{ user.get_avatar_url }}" />
14
对于那些通过社交账号注册的用户,会有一个叫做 SocialAccount
的模型实例。
在你的模板中,你可以简单地写:
头像网址: {{ user.socialaccount_set.all.0.get_avatar_url }}
用户ID: {{ 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 }}
想了解更多信息,可以查看这个链接: Django allauth 源码