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帳戶表 結束————————————————