如果 Django 自帶的用戶模型不能滿足我們需求,我們可以對(duì)其進(jìn)行擴(kuò)展喘漏。
1.創(chuàng)建用戶信息模型
我們?cè)?models 中新建一個(gè)用戶信息模型描验,用 OneToOneField
(一對(duì)一關(guān)系)來(lái)讓它和 User(Django 自帶的用戶模型)來(lái)一一對(duì)應(yīng)。
from django.db import models
# django的用戶模型
from django.contrib.auth.models import User
# 用戶擴(kuò)展
class UserInfo(models.Model):
# 一對(duì)一關(guān)系捶箱,一條 UserInfo 數(shù)據(jù)對(duì)應(yīng)一個(gè)具體的 User
# related_name='info' 表示 UserInfo 在 User 表中對(duì)應(yīng)的名稱的 'info'
belong_to = models.OneToOneField(to=User, related_name='info')
# 添加要擴(kuò)展到 User 中的新字段
age = models.IntegerField(null=True, blank=True)
address = models.CharField(max_length=50, null=True, blank=True)
創(chuàng)建完成后請(qǐng)?jiān)诤笈_(tái)管理添加相應(yīng)的數(shù)據(jù)智什。
2.編寫(xiě)前端
我們把 UserInfo 的 related_name
設(shè)為了 info
,在要調(diào)用 UserInfo 的數(shù)據(jù)時(shí)丁屎,可以這樣使用:
request.user.info.xxx(對(duì)應(yīng)字段名)
改寫(xiě) userInfo.html
荠锭,展示剛才擴(kuò)展的新字段:
<!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.測(cè)試
登錄后打開(kāi) http://127.0.0.1:8000/user_info/ ,看到新添加的字段和信息: