You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django注册功能:如何将生成的许可证密钥关联至用户账户?

解决Django注册时关联许可证密钥到用户账户的方法

步骤1:给用户模型添加许可证密钥字段

默认Django User模型没有许可证密钥字段,你需要通过以下两种方式之一扩展模型来存储密钥:

方法A:扩展默认User模型(推荐)

在你的应用models.py中添加:

from django.contrib.auth.models import AbstractUser
from django.db import models

class CustomUser(AbstractUser):
    # 根据实际密钥长度调整max_value,允许为空方便后续补全
    license_key = models.CharField(max_length=100, blank=True, null=True)

然后在项目settings.py中配置自定义用户模型:

AUTH_USER_MODEL = '你的应用名.CustomUser'

最后执行数据库迁移命令:

python manage.py makemigrations
python manage.py migrate

方法B:创建关联的Profile模型

如果不想修改默认User模型,可创建与User绑定的Profile模型:

from django.db import models
from django.contrib.auth.models import User

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    license_key = models.CharField(max_length=100, blank=True, null=True)

    def __str__(self):
        return self.user.username

同样执行数据库迁移命令完成模型创建。

步骤2:修改注册视图代码,保存密钥到用户

根据你选择的模型方式,修改signup视图:

对应方法A(CustomUser)的视图代码

from django.shortcuts import render
from django.contrib.auth import login
from .forms import SignupForm
from Functions.license_key import license_getter

def signup(request):
    if request.method == 'POST':
        form = SignupForm(request.POST)
        if form.is_valid():
            # 先获取用户实例但暂不保存到数据库
            user = form.save(commit=False)
            try:
                license_key = license_getter(access_key='access_key')
            except:
                license_key = 'Key'
            # 给用户实例赋值许可证密钥
            user.license_key = license_key
            # 保存用户及密钥到数据库
            user.save()
            login(request, user)
            # 模板路径用正斜杠避免跨系统解析问题
            return render(request, 'registration/license_key.html', {'license_key': license_key})
    else:
        form = SignupForm()
    return render(request, 'registration/signup.html', {'form': form})

对应方法B(UserProfile)的视图代码

from django.shortcuts import render
from django.contrib.auth import login
from .forms import SignupForm
from .models import UserProfile
from Functions.license_key import license_getter

def signup(request):
    if request.method == 'POST':
        form = SignupForm(request.POST)
        if form.is_valid():
            user = form.save()
            try:
                license_key = license_getter(access_key='access_key')
            except:
                license_key = 'Key'
            # 获取或创建用户对应的Profile实例
            profile, created = UserProfile.objects.get_or_create(user=user)
            profile.license_key = license_key
            profile.save()
            login(request, user)
            return render(request, 'registration/license_key.html', {'license_key': license_key})
    else:
        form = SignupForm()
    return render(request, 'registration/signup.html', {'form': form})

关键说明

你之前尝试user.save()后无法跳转,核心原因是User模型没有license_key字段,保存时触发了未捕获的异常导致请求中断。完成模型修改和数据库迁移后,再执行保存操作即可正常跳转。

内容的提问来源于stack exchange,提问作者anon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 18:31:14