Django框架詳細介紹---Admin後臺管理

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
models數據模型

  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中實現單例的方式(詳見面向對象章節):

  •     經過導入模塊的方式
  •     使用__new__方法
  •     使用裝飾器(decorator)
  •     使用元類(metaclass)

示例:

  經過模塊導入,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看執行流程

   待續

相關文章
相關標籤/搜索