from django.contrib.auth.models import AbstractUser 的继承

本文介绍了如何在Django项目中使用自定义用户模型替换默认的用户认证模型,并展示了具体的代码实现过程,包括在models.py文件中定义新的用户模型及在settings.py中配置自定义用户模型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.在Django中的models.py建表

from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.


class UserInfo(AbstractUser):
nid = models.AutoField(primary_key=True)
phone = models.CharField(max_length=11, null=True)
avatar = models.FileField(upload_to="avatars/", default="avatar/default.png", verbose_name="头像")
create_time = models.DateTimeField(auto_now_add=True)

blog = models.OneToOneField(to="Blog", to_field="nid", null=True)

def __str__(self):
return self.username


class Blog(models.Model):
"""
博客信息
"""
nid = models.AutoField(primary_key=True)
title = models.CharField(max_length=64) # 个人博客标题
site = models.CharField(max_length=32, unique=True) # 个人博客后缀
theme = models.CharField(max_length=32) # 博客主题

def __str__(self):
return self.title

2.在settings.py中

# 告诉Django项目用哪个APP下的哪儿张表做认证
AUTH_USER_MODEL = 'APP名称.UserInfo'

转载于:https://www.cnblogs.com/Guishuzhe/p/9569978.html

1.视图处理逻辑:“ from django.shortcuts import render, redirect from django.contrib.auth import login, authenticate from django.contrib.auth.models import User from .models import VipUser # 自定义注册视图 def register_view(request): if request.method == 'POST': # 获取表单数据 username = request.POST['username'] password = request.POST['password'] plate_number = request.POST['plate_number'] phone = request.POST['phone'] # 创建Django用户 user = User.objects.create_user(username=username, password=password) # 创建关联会员 VipUser.objects.create( user=user, plate_number=plate_number, phone=phone ) # 自动登录并跳转 login(request, user) return redirect('dashboard') # 后续会实现dashboard return render(request, 'registration/register.html') # 自定义登录视图(复用Django内置逻辑) from django.contrib.auth.views import LoginView class CustomLoginView(LoginView): template_name = 'registration/login.html' redirect_authenticated_user = True # 已登录用户直接跳转 ” 2.车辆入场视图:“ from django.shortcuts import render, redirect from django.contrib import messages from django.utils import timezone from .models import CarRecord, ParkingSlot, VipUser def vehicle_entry(request): if request.method == 'POST': license_plate = request.POST.get('license_plate', '').strip().upper() # 基本验证 if not license_plate: messages.error(request, "请输入有效车牌号") return redirect('entry') # 检查是否有未离场记录 existing_record = CarRecord.objects.filter( license_plate=license_plate, exit_time__isnull=True ).exists() if existing_record: messages.warning(request, "该车辆已在场内") return redirect('entry') # 查找可用车位 available_slot = ParkingSlot.objects.filter(is_occupied=False).first() if not available_slot: messages.error(requ
03-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值