如果 Django 自带的用户模型不能满足我们需求,我们可以对其进行扩展。
1.创建用户信息模型
我们在 models 中新建一个用户信息模型,用 OneToOneField
(一对一关系)来让它和 User(Django 自带的用户模型)来一一对应。
from django.db import models
# django的用户模型
from django.contrib.auth.models import User
# 用户扩展
class UserInfo(models.Model):
# 一对一关系,一条 UserInfo 数据对应一个具体的 User
# related_name='info' 表示 UserInfo 在 User 表中对应的名称的 'info'
belong_to = models.OneToOneField(to=User, related_name='info')
# 添加要扩展到 User 中的新字段
age = models.IntegerField(null=True, blank=True)
address = models.CharField(max_length=50, null=True, blank=True)
创建完成后请在后台管理添加相应的数据。
2.编写前端
我们把 UserInfo 的 related_name
设为了 info
,在要调用 UserInfo 的数据时,可以这样使用:
request.user.info.xxx(对应字段名)
改写 userInfo.html
,展示刚才扩展的新字段:
<!DOCTYPE html>
{% load staticfiles %}
<html>
<head>
<title>user_info</title>
</head>
<body>
<h3>用户信息</h3>
<p>用户名: {{ request.user.username }}</p>
<p>年龄: {{ request.user.info.age }}</p>
<p>所在地: {{ request.user.info.address }}</p>
<a href={% url 'logout' %}>
<button>退出</button>
</a>
</body>
</html>
3.测试
登录后打开 http://127.0.0.1:8000/user_info/ ,看到新添加的字段和信息: