Django项目:堡垒机(Linux服务器主机管理系统)--01--01堡垒机重写DJANGO账户表
python相关软件安装流程图解————————python安装——————python-3.7.1-amd64
https://www.cnblogs.com/ujq3/p/10098166.html
python相关软件安装流程图解————————pycharm安装——————pycharm-professional-2018.3.1
https://www.cnblogs.com/ujq3/p/10098615.html
注意,先安装 DJANGO
1 #models.py 2 #————————————————01堡垒机重写DJANGO账户表 开始———————————————— 3 from django.db import models #模型 4 from django.contrib.auth.models import BaseUserManager,AbstractBaseUser,PermissionsMixin#DJANGO账户继承重写 5 6 #重写DJAGO账号表 7 class UserProfileManager(BaseUserManager): 8 def create_user(self, email, name, password=None):#创建并保存一个普通用户给定的邮箱地址,密码。 9 if not email: 10 raise ValueError('用户必须有一个电子邮箱地址') 11 user = self.model(email=self.normalize_email(email),#验证邮箱格式 12 name=name,)#创建一条普通用户记录 13 user.set_password(password)#对密码加密 14 user.save(using=self._db)#从临时文件读取出来数据,进行保存。 15 return user 16 17 def create_superuser(self, email,name,password):#创建并保存一个超级用户给定的邮箱地址,密码。 18 user = self.create_user(email,name=name,password=password)#创建一条超级用户记录 19 user.is_admin = True#管理员 20 user.save(using=self._db)#从临时文件读取出来数据,进行保存。 21 return user 22 23 #重写DJAGO账号表 24 class UserProfile(AbstractBaseUser,PermissionsMixin): 25 # ————#DJANGO账号必须要有的字段 开始———— 26 email = models.EmailField( max_length=255,unique=True,verbose_name='邮箱地址') 27 name = models.CharField(max_length=32,verbose_name='昵称') 28 is_active = models.BooleanField(default=True,verbose_name='是否启用') 29 is_admin = models.BooleanField(default=False,verbose_name='管理员',help_text='指定用户是否可以登录管理网站并且拥有全部权限',) 30 is_staff = models.BooleanField(default=True,verbose_name='员工状态',help_text='指定用户是否可以登录管理网站',) 31 # ————#DJANGO账号必须要有的字段 结束———— 32 #————#创建用户记录 开始———— 33 objects = UserProfileManager()#创建用户记录,固定的变量名(objects) 34 USERNAME_FIELD = 'email' #用于登录的字段 35 REQUIRED_FIELDS = ['name']#必须填写 36 # ————#创建用户记录 结束———— 37 # ————#DJANGO账号必须要有的方法 开始———— 38 def get_full_name(self):#用户确认的电子邮件地址 39 return self.email 40 def get_short_name(self):#用户确认的电子邮件地址 41 return self.email 42 # ————#DJANGO账号必须要有的方法 结束———— 43 def __str__(self):# __unicode__ on Python 2 44 return self.email 45 # ————#DJANGO账号权限 开始———— 46 def has_perm(self, perm, obj=None):#权限#用户有一个特定的许可吗? 47 return True 48 def has_module_perms(self, app_label):#用户有权限查看应用名称吗? 49 return True 50 # ————#DJANGO账号权限 结束———— 51 class Meta: 52 verbose_name_plural='00账户' 53 # ————自定制admin 开始———— 54 #到admin.py里给DJANGO账户注册显示 #E:\堡垒机\eye\Fortress\admin.py 55 # ————自定制admin 结束———— 56 # ————注册到配置文件 开始———— 57 #到配置文件里给DJANGO账户指定模型 #E:\堡垒机\eye\eye\settings.py 58 #AUTH_USER_MODEL = 'web.UserProfile' 59 # ————注册到配置文件 结束———— 60 #————————————————01堡垒机重写DJANGO账户表 结束———————————————— 61 62 """ 63 # ————————————————Django中使用中国时区和中文 开始———————————————— 64 到settings.py里修改#E:\堡垒机\eye\eye\settings.py 65 LANGUAGE_CODE = 'zh-Hans' 66 TIME_ZONE = 'Asia/Shanghai' 67 如果需要全局配置默认时区和语言,可在django下的conf模块下的global_settings.py中进行配置 68 所有可选的语言选项可通过python输入以下代码查看: 69 from django.conf.locale import LANG_INFO 70 {key: LANG_INFO[key]['name_local'] for key in LANG_INFO if 'name_local' in LANG_INFO[key]} 71 # ————————时间扩展 开始———————— 72 USE_TZ = True 73 当设置了 USE_TZ 为 True 时,Django 与其他系统或服务的交流将强制使用 UTC 时间。 74 1.保证存储到数据库中的是 UTC 时间; 75 2.在函数之间传递时间参数时,确保时间已经转换成 UTC 时间; 76 # ——Django中跨时区 开始—— 77 一般不跨时区的应用,可以不使用时区,即在settings.py设置 78 USE_TZ = False 79 这样存储的时间就是无时区的时间。 80 # ——Django中跨时区 结束—— 81 # ————————时间扩展 结束———————— 82 # ————————————————Django中使用中国时区和中文 结束———————————————— 83 # ————————————————Django数据库生成 开始———————————————— 84 运行 Terminal 85 生成 数据表 86 E:\PY2\CrazyEye>python manage.py makemigrations 87 数据表 迁移 88 E:\PY2\CrazyEye>python manage.py migrate 89 # ————————————————Django数据库生成 结束———————————————— 90 # ————————————————重写Django账号表后的创建方法 开始———————————————— 91 E:\PY2\CrazyEye>python manage.py createsuperuser 92 邮箱地址: admin@qq.com 93 昵称: admin 94 Password: admin123456 95 Password (again): admin123456 96 Superuser created successfully. 97 # ————————————————重写Django账号表后的创建方法 结束———————————————— 98 #启动 DJANGO 服务 99 E:\PY2\CrazyEye>python manage.py runserver 127.0.0.1:8000 100 """
1 #admin.py 2 #————————————————01堡垒机重写DJANGO账户表 开始———————————————— 3 #————————同目录下可以用 . 开始———————— 4 #from Fortress import models#数据库 #重写DJAGO账号表 5 from . import models#数据库 #重写DJAGO账号表 6 #————————同目录下可以用 . 结束———————— 7 from django import forms #django的字段验证 8 from django.contrib.auth.admin import UserAdmin as BaseUserAdmin ##表单添加和更改用户实例 9 from django.contrib.auth.forms import ReadOnlyPasswordHashField#只读密码散列字段 10 from django.contrib import admin #注册类到admin 11 #创建新用户 12 class UserCreationForm(forms.ModelForm): 13 password1 = forms.CharField(label='设置密码', widget=forms.PasswordInput)#密码 14 password2 = forms.CharField(label='确认密码', widget=forms.PasswordInput)#确认密码 15 class Meta: 16 model = models.UserProfile 17 fields = ['email', 'name'] 18 def clean_password2(self): #检查两个密码条目是否一样(匹配) 19 password1 = self.cleaned_data.get("password1") 20 password2 = self.cleaned_data.get("password2") 21 if password1 and password2 and password1 != password2: 22 raise forms.ValidationError("密码不匹配") 23 return password2 24 def save(self, commit=True): #保存密码(散列的格式提供) 25 user = super(UserCreationForm, self).save(commit=False) 26 user.set_password(self.cleaned_data["password1"]) 27 if commit: 28 user.save()#保存 29 return user 30 # 修改用户密码 31 class UserChangeForm(forms.ModelForm): 32 password = ReadOnlyPasswordHashField(label="修改密码", 33 help_text=("原始密码不存储,所以没有办法看到" 34 "这个用户的密码,但是你可以改变密码 " 35 "使用 <a href=\"../password/\">修改密码</a>."))#哈值#只读密码散列字段 36 class Meta: 37 model = models.UserProfile 38 fields = ['email', 'password', 'name', 'is_active', 'is_admin'] 39 def clean_password(self):#不管用户提供什么,返回初始值。 40 return self.initial["password"] 41 42 #表单添加和更改用户实例 43 class UserProfileAdmin(BaseUserAdmin): 44 form = UserChangeForm #修改 45 add_form = UserCreationForm#创建 46 # 字段用于显示用户模型。 47 # 这些覆盖定义UserAdmin固定在底座上 48 # auth.User参考特定字段。 49 list_display = ['email', 'name','is_staff', 'is_admin']#后台显示的字段 50 list_filter = ['is_admin','is_staff']#后台过滤的字段 51 fieldsets = (('账号密码', {'fields': ('email', 'password')}), 52 ('个人信息', {'fields': ('name',)}), 53 ('权限', {'fields': ('is_admin','is_staff','user_permissions','groups')}),) 54 #添加账户时显示要填写的字段 55 add_fieldsets = (('添加账户', {'classes': ('wide',),#wide(宽屏样式) 56 'fields': ('email', 'name', 'password1', 'password2')}),) 57 search_fields = ['email']#后台搜索的字段 58 ordering = ['email']#后台排序的字段 59 filter_horizontal =['user_permissions','groups',#必须覆盖的变量#后台复选框的字段 60 ] 61 admin.site.register(models.UserProfile, UserProfileAdmin)#现在注册这个新UserProfileAdmin 62 # ——可选——使用Django的内置权限 开始———— 63 #from django.contrib.auth.models import Group #权限组 64 #admin.site.unregister(Group)#权限组#因为我们不使用Django的内置权限, 65 # ——可选——使用Django的内置权限 结束———— 66 #————————————————01堡垒机重写DJANGO账户表 结束————————————————
1 #settings.py 2 3 """ 4 Django settings for eye project. 5 6 Generated by 'django-admin startproject' using Django 2.1.4. 7 8 For more information on this file, see 9 https://docs.djangoproject.com/en/2.1/topics/settings/ 10 11 For the full list of settings and their values, see 12 https://docs.djangoproject.com/en/2.1/ref/settings/ 13 """ 14 15 import os 16 17 # Build paths inside the project like this: os.path.join(BASE_DIR, ...) 18 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 19 20 21 # Quick-start development settings - unsuitable for production 22 # See https://docs.djangoproject.com/en/2.1/howto/deployment/checklist/ 23 24 # SECURITY WARNING: keep the secret key used in production secret! 25 SECRET_KEY = 'r35s$()7lli1hw-!6%llp0uu$!m!e#nnlxu+&!6$(g*6f0=@2#' 26 27 # SECURITY WARNING: don't run with debug turned on in production! 28 DEBUG = True 29 30 ALLOWED_HOSTS = [] 31 32 33 # Application definition 34 35 INSTALLED_APPS = [ 36 'django.contrib.admin', 37 'django.contrib.auth', 38 'django.contrib.contenttypes', 39 'django.contrib.sessions', 40 'django.contrib.messages', 41 'django.contrib.staticfiles', 42 'Fortress.apps.FortressConfig', 43 ] 44 45 MIDDLEWARE = [ 46 'django.middleware.security.SecurityMiddleware', 47 'django.contrib.sessions.middleware.SessionMiddleware', 48 'django.middleware.common.CommonMiddleware', 49 'django.middleware.csrf.CsrfViewMiddleware', 50 'django.contrib.auth.middleware.AuthenticationMiddleware', 51 'django.contrib.messages.middleware.MessageMiddleware', 52 'django.middleware.clickjacking.XFrameOptionsMiddleware', 53 ] 54 55 ROOT_URLCONF = 'eye.urls' 56 57 TEMPLATES = [ 58 { 59 'BACKEND': 'django.template.backends.django.DjangoTemplates', 60 'DIRS': [os.path.join(BASE_DIR, 'templates')] 61 , 62 'APP_DIRS': True, 63 'OPTIONS': { 64 'context_processors': [ 65 'django.template.context_processors.debug', 66 'django.template.context_processors.request', 67 'django.contrib.auth.context_processors.auth', 68 'django.contrib.messages.context_processors.messages', 69 ], 70 }, 71 }, 72 ] 73 74 WSGI_APPLICATION = 'eye.wsgi.application' 75 76 77 # Database 78 # https://docs.djangoproject.com/en/2.1/ref/settings/#databases 79 80 DATABASES = { 81 'default': { 82 'ENGINE': 'django.db.backends.sqlite3', 83 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 84 } 85 } 86 87 88 # Password validation 89 # https://docs.djangoproject.com/en/2.1/ref/settings/#auth-password-validators 90 91 AUTH_PASSWORD_VALIDATORS = [ 92 { 93 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 94 }, 95 { 96 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 97 }, 98 { 99 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 100 }, 101 { 102 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 103 }, 104 ] 105 106 107 # Internationalization 108 # https://docs.djangoproject.com/en/2.1/topics/i18n/ 109 #————————————————01堡垒机重写DJANGO账户表 开始———————————————— 110 # ————Django中使用中国时区和中文 开始———— 111 #LANGUAGE_CODE = 'en-us' 112 #TIME_ZONE = 'UTC' 113 LANGUAGE_CODE = 'zh-Hans' 114 TIME_ZONE = 'Asia/Shanghai' 115 # ————Django中使用中国时区和中文 结束———— 116 #————————————————01堡垒机重写DJANGO账户表 结束———————————————— 117 USE_I18N = True 118 119 USE_L10N = True 120 #————————————————01堡垒机重写DJANGO账户表 开始———————————————— 121 # ————Django中跨时区 开始———— 122 # USE_TZ = True 123 USE_TZ = False 124 # ————Django中跨时区 结束———— 125 #————————————————01堡垒机重写DJANGO账户表 结束———————————————— 126 # Static files (CSS, JavaScript, Images) 127 # https://docs.djangoproject.com/en/2.1/howto/static-files/ 128 129 STATIC_URL = '/static/' 130 131 #————————————————01堡垒机重写DJANGO账户表 开始———————————————— 132 AUTH_USER_MODEL = 'Fortress.UserProfile' 133 #————————————————01堡垒机重写DJANGO账户表 结束————————————————
您的资助是我最大的动力!
金额随意,欢迎来赏!
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的
因为,我的写作热情也离不开您的肯定支持,感谢您的阅读,我是【颜言】!