Django应用中如何获取已登录用户的信息并存储额外自定义数据?
Django注册场景获取用户信息并存储额外字段方案
1. 注册流程中获取新创建用户的方法
你当前使用的UserCreationForm的save()方法会直接返回刚创建的用户对象,你可以通过加commit=False参数先暂存对象不写入数据库,补充完自定义字段后再执行保存操作,修改后代码如下:
def registerView(request): if request.method == "POST": form = UserCreationForm(request.POST) if form.is_valid(): # 先获取用户对象,暂不提交到数据库 user = form.save(commit=False) # 此处补充你需要的额外信息,示例为扩展User模型的自定义字段 # user.nickname = request.POST.get("nickname") # user.age = request.POST.get("age") # 补充完成后提交数据到数据库 user.save() return redirect('login_url') # 修正原代码的缩进逻辑错误:原else挂载在form.is_valid()下会丢失错误提示 else: form = UserCreationForm() return render(request, 'main/register.html',{'form':form})
2. 已登录状态下获取用户信息的方法
如果是用户登录后在其他视图中获取当前登录用户信息,直接调用request.user即可,示例代码如下:
def edit_profile(request): # 先校验用户是否处于登录状态 if not request.user.is_authenticated: return redirect('login_url') # 直接获取当前登录的用户实例 current_user = request.user # 补充/修改额外字段 current_user.signature = "用户自定义签名" current_user.save()
3. 额外信息存储在独立关联模型的处理方式
如果你的额外字段没有直接扩展Django内置User模型,而是单独写了关联的用户资料模型,示例处理逻辑如下:
假设你models.py中的关联模型定义为:
from django.db import models from django.contrib.auth.models import User class UserProfile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="profile") phone = models.CharField(max_length=11, blank=True) avatar = models.ImageField(upload_to="user_avatar/", default="default.png")
注册时创建关联资料的代码:
if form.is_valid(): user = form.save() # 直接创建关联的用户资料记录 UserProfile.objects.create( user=user, phone=request.POST.get("phone") ) return redirect('login_url')
内容的提问来源于stack exchange,提问作者Shreyansh Dash
相关产品推荐
相关产品推荐

