David__Liang 2021-12-22 11:07 采纳率: 82.4%
浏览 89
已结题

Python Django

这是model模块


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



class Teacher(AbstractUser):
    phone = models.CharField(max_length=11,verbose_name='手机号')

    class Meta:
        db_table='teacher'
        verbose_name='教师'
        verbose_name_plural=verbose_name
    def __str__(self):
        return self.username;

这是view模块


#注册模块
def register(request):
    if request.method =="POST":
        forms_Reg = forms.registerForm(request.POST)
        #帮我做校验
        if forms_Reg.is_valid():
            #校验通过,去数据库创建一个新用户
            forms_Reg.cleaned_data.pop("re_password")
            models.Teacher.objects.create_user(**forms_Reg.cleaned_data)
            #创建成功之后就跳转到登录页面
            return redirect("/login/")
        else:

            return render(request,"register.html",{"form_Reg":forms_Reg})
    form_Reg = forms.registerForm()
    return render(request,"register.html",{"form_Reg":form_Reg})

这是admin模块


from django.contrib import admin
from .models import Teacher
# Register your models here.
admin.site.site_header='线性代数试卷生成系统后台'
admin.site.site_title="教师管理"

@admin.register(Teacher)
class TeacherAdmin(admin.ModelAdmin):
    list_display = ('username','password')   #要显示的字段



我基于django的用户模块创建一个用户模块,然后资金弄html然后通过view中的注册函数注册的用户密码是加密,
但是不知道为什么在Admin中添加的用户,用户密码就不是加密的还出现了以下报错,

img

  • 写回答

5条回答 默认 最新

  • 关注

    引用django用户表示user而不是AbstractUser
    参考delmo

    from django.contrib.auth.models import User
    class Userinfo(User):
        supernumber = models.IntegerField(verbose_name = '权限',choices = ((0,'无权限'),(1,'销售权限'),(2,"管理权限")),
                                          default = 0,
                                          help_text = "非必填:用户登录到前台后的权限")
        isenable = models.BooleanField(verbose_name = '是否启用',default = False,help_text = "非必选:用户能否登录前台界面")
        
        def __init__(self,*args,**kwargs):
            super(Userinfo,self).__init__(*args,**kwargs)
            self._meta.get_field('is_staff').verbose_name = '能否登录后台'
            self._meta.get_field('groups').verbose_name = '用户组'
            self._meta.get_field('user_permissions').verbose_name = '用户数据库权限'
            self._meta.get_field("last_name").help_text = "非必填:姓氏"
            self._meta.get_field("first_name").help_text = "非必填:名字"
            self._meta.get_field("email").help_text = "非必填:邮箱"
            self._meta.get_field("date_joined").help_text = "非必填:加入时间"
        
        class Meta:
            db_table = 'userinfo'
            verbose_name = '用户信息表'
            verbose_name_plural = verbose_name
        
        def __str__(self):
            return f"用户名:{self.username},权限:{self.supernumber}"
    

    创建用户

    from django.contrib.auth.hashers import make_password, check_password
    
    
    #从django请求中获取的参数,我这里使用装饰器将所有参数放在可kwargs中
    name = kwargs.get('name')
    pwd = kwargs.get('pwd')
    makpwd = make_password(password=pwd)
    #添加用户
    Userinfo.objects.create(username=name, password=makpwd)
    

    这样即可在admin中添加用户的同时自己添加用户

    img

    img

    img

    有帮助请点一下右上角的采纳,谢谢

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 1月4日
  • 已采纳回答 12月27日
  • 创建了问题 12月22日

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料