Django扩建auth_user表——小白教小白傻瓜式教程

我本来是做两张表想着关联一下,自带的auth_user就用来存用户登录信息,自建userinfo存其他信息的,但是,破灭了。

抹干眼泪做个坚强的男孩子。

下面,就扩展auth_user表,把所有需要的信息存进去就行了呗。

但是,怎么扩建呢?网上教程一大堆。

上来就是一顿操作,操作是猛如虎,但是,小白看的懵逼啊。

作为小白,我看那些博文的时候,主要有以下疑惑:

1,那么多种扩展方法,那种更适合小白上手

2,扩展了之后,是在原表上扩展的吗?

3,如果是,表还是叫auth_user吗?

4,如果不是,那么现在两张表?我该用自己扩展后新建的吗?

5,怎么用?

........

好,经过我阅文无数,加上实操。解答并逐步示范操作,让大家少走弯路,少查文档,节省时间。

1,使用 继承AbstractUser类 去扩展更方便简单

2,使用1操作后,属于原表扩展,因为原表也是继承该类

3,虽然是在原表扩展,但是表名变成了你自建的app加你创建的类名(如我的app是Myapp,类是UserInfo表名为myapp_userinfo),注意,不因为你的大小写而大小写,统一为小写。

4,继承该类扩展的表,只用一张,原auth_user不会被创建。

5,下面教你怎么用。

一,创建models,继承AbstractUser (注意,我这里有头像字段,需要pip install pillow,避免迁移报错)

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

# Create your models here.
class UserInfo(AbstractUser):
    username = models.CharField(max_length=20,verbose_name='昵称',unique=True)
    phone = models.CharField(max_length=20,verbose_name='联系方式',default='')
    cate = models.CharField(max_length=10,verbose_name='用户类型')
    detail = models.CharField(max_length=1000,verbose_name='简介')
    address = models.CharField(max_length=500,verbose_name='地址')
    # upload_to指定了图片上传的位置
    # %Y%m%d是日期格式化的写法,会最终格式化为系统时间
    avater = models.ImageField(upload_to='avatar/%Y%m%d/',verbose_name='头像',blank=True)
    # pic = models.CharField(max_length=300,verbose_name='头像')

    class Meta:
        verbose_name = 'UserInfo'

二,settings.py里设置    你的app名.你的models类名

# 扩展默认数据库
AUTH_USER_MODEL = 'Myapp.UserInfo'

三,生成与执行迁移,得到如下表:

可以看到,被选择的哪行,就是我们新建的,原有的auth_user不会生成。

字段也扩展了,唯一的缺点是,密码明文了。(这个会导致使用authenticate验证时,登录失败)

四,在views.py使用,其实和普通建表使用的方法是一样的,举个栗子,用注册举吧。

# 导入模型
from .models import UserInfo
from django.shortcuts import render, redirect
from django.http import HttpResponseRedirect
from django.contrib.auth import authenticate,login,logout

# 注册
def register(request):
    info = None
    if request.method == 'POST' and request.POST:
        data = request.POST
        username = data.get("username")
        password = data.get("password")
        # 校验注册,名字不可重复
        if username:
            u = UserInfo.objects.filter(username=username).first()
            if u:
                info = '该用户名已被注册'
                return render(request,'Myapp/register.html',{'info':info})
            else:
                if password:
                    UserInfo.objects.create(
                        username=username,
                        password=password
                    )
                # 重定向到登录页面
                    return HttpResponseRedirect('/tologin/')
        info = '注册失败,用户名或密码不能为空'
        # info =
    # 注册失败,重新注册
    return render(request,'Myapp/register.html',{'info':info})

一步一步执行,看看注册后,数据库的效果。

首页:

注册:注册个熊二

注册完成跳登录:

登录后主页:

数据库信息:

另外,我已经完成了个人信息修改与头像上传。嘿嘿。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值