本文主要是介绍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 = Noneif request.method == 'POST' and request.POST:data = request.POSTusername = 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})
一步一步执行,看看注册后,数据库的效果。
首页:
注册:注册个熊二
注册完成跳登录:
登录后主页:
数据库信息:
另外,我已经完成了个人信息修改与头像上传。嘿嘿。
这篇关于Django扩建auth_user表——小白教小白傻瓜式教程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!