1.Admin組件使用python
Django內集成了web管理工具,Django在啓動過程當中會執行setting.py文件,初始化Django內置組件、註冊APP、添加環境變量等git
# Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app.apps.AppConfig', ]
示例:web
激活管理工具,並將數據模型註冊到admin即可以進行增刪查改django
1)激活(默認在生成項目時激活)設計模式
from django.contrib import admin from django.urls import path urlpatterns = [ path('admin/', admin.site.urls), ]
2)註冊session
經過 python manage.py createsuperuser 建立超級用戶,將準備好的數據模型註冊到admin,啓動服務以後經過http://127.0.0.1:8000/admin訪問登陸(本地管理測試)app
from django.db import models # Create your models here. from django.contrib.auth.models import AbstractUser class UserInfo(AbstractUser): """ 用戶信息表 """ nid = models.AutoField(primary_key=True) phone = models.CharField(max_length=11, null=True, unique=True) def __str__(self): return self.username class Meta: verbose_name = "用戶信息" verbose_name_plural = verbose_name class Author(models.Model): name = models.CharField(max_length=32) age = models.IntegerField() def __str__(self): return self.name class Publish(models.Model): name = models.CharField(max_length=32) email = models.EmailField() def __str__(self): return self.name class Book(models.Model): title = models.CharField(max_length=32) publishDate = models.DateField() price = models.DecimalField(max_digits=5, decimal_places=2) publisher = models.ForeignKey(to="Publish", on_delete=models.CASCADE) authors = models.ManyToManyField(to='Author') def __str__(self): return self.title
3)admin定製ide
在admin.py中註冊models中相應的類,便可經過管理工具進行增刪查改函數
# 方式一: class User_admin(admin.ModelAdmin): list_display = ("username",) # 第一個參數可傳入列表,實現多個數據模型的註冊 admin.site.register(models.UserInfo, User_admin) # 方式二: @admin.register(models.UserInfo) class User_admin(admin.ModelAdmin): list_display = ("username",)
2.可在ModelAdmin中定製其它功能工具
1)list_diapaly,定製顯示的列
class User_admin(admin.ModelAdmin): list_display = ("username",) # 第一個參數可傳入列表,實現多個數據模型的註冊 admin.site.register(models.UserInfo, User_admin)
2)list_display_links,定製列能夠跳轉
class Publisher_admin(admin.ModelAdmin): list_display = ("name", "email") list_display_links = ["name", "email",] admin.site.register(models.Publish, Publisher_admin)
3)其它定製方法
list_filter 列表時,定製右側快速篩選。 list_select_related 列表時,連表查詢是否自動select_related list_editable 列表時,能夠編輯的列 search_fields 列表時,模糊搜索的功能 date_hierarchy 列表時,對Date和DateTime類型進行搜索 inlines 詳細頁面,若是有其餘表和當前表作FK,那麼詳細頁面能夠進行動態增長和刪除 action 列表時,定製action中的操做 定製HTML模板 add_form_template = None change_form_template = None change_list_template = None delete_confirmation_template = None delete_selected_confirmation_template = None object_history_template = None raw_id_fields 詳細頁面,針對FK和M2M字段變成以Input框形式 fields 詳細頁面時,顯示字段的字段 exclude 詳細頁面時,排除的字段 readonly_fields 詳細頁面時,只讀字段 fieldsets 詳細頁面時,使用fieldsets標籤對數據進行分割顯示
詳細頁面時,M2M顯示時,數據移動選擇(方向:上下和左右)
filter_vertical
filter_horizontal
ordering 列表時,數據排序規則 radio_fields 詳細頁面時,使用radio顯示選項(FK默認使用select) form = ModelForm 用於定製用戶請求時候表單驗證
empty_value_display = "列數據爲空時,顯示默認值"
3.Admin源碼解析
1)單例模式
Singleton Pattern,是一種經常使用的軟件設計模式,主要確保相應的類只有一個實例存在,例如一個鏈接數據類,只需生成一個實例,在存在多個鏈接的狀況下無需再生成多個實例,從而節省內存資源
Python中實現單例的方式(詳見面向對象章節):
示例:
經過模塊導入,Python模塊就是自然的單例模式,在模塊第一次導入的時候,會生成.pyc文件,再次導入時會直接執行.pyc文件,而不會再次執行模塊中的代碼,即只在首次導入執行模塊內代碼,所以可將相關的函數或數據定義在指定模塊中並將其導入即可獲得一個單例
# mysingleton.py class My_Singleton(object): def func(self): pass
my_singleton = My_Singleton()
將模塊導入
from mysingleton import my_singleton my_singleton.func()
2)以將models數據模型中的類註冊到Admin看執行流程
待續