Django+SimpleUI快速開發指南


適合創業團隊的後臺工具快速開發指南


print(u“人生苦短,我用Python”)

一、環境準備

1、創建新的django項目

Django+SimpleUI快速開發指南

2、安裝simpleui

<code># 指定清華源安裝simpleuipip install django-simpleui -i https://pypi.tuna.tsinghua.edu.cn/simple/<code>

3、修改django後臺模塊默認的模板

<code># 修改project的setting文件,在INSTALLED_APPS 首行引入simple應用  INSTALLED_APPS = [      'simpleui',      'django.contrib.admin',      'django.contrib.auth',      'django.contrib.contenttypes',      'django.contrib.sessions',      'django.contrib.messages',      'django.contrib.staticfiles',      ...  ]/<code>

4、字符集及時區設置

<code># 修改project的setting文件LANGUAGE_CODE = 'zh-hans'TIME_ZONE = 'Asia/Shanghai'USE_TZ = False # 這裡務必調整為False,否則時區設置無效/<code>

5、靜態資源及debug狀態設置

<code># django在開發環境提供bug調試功能,同時該設置影響到runserver運行時的靜態資源引入,故生產環境關閉debug開關的時候,保障靜態資源的正確引入需要顯性定義靜態資源DEBUG = True# 定義靜態資源位置 STATICFILES_DIRS = [     os.path.join(BASE_DIR, "static"), ]# or 通過克隆方式將靜態資源克隆到項目的靜態資源目錄,交由ngnix調用python3 manage.py collectstatic# 如果克隆報錯提示找不到靜態目錄,請先在settings.py指定靜態目錄STATIC_ROOT = os.path.join(BASE_DIR, "static")# 由於開發過程中simpleui有限通過cdn進行頁面渲染,一般情況下我們需要將其調整成本地資源方式,往往生產環境是無法連接外網的SIMPLEUI_STATIC_OFFLINE = True # 離線模式/<code>

6、數據庫連接配置

<code># 這裡以postgresql數據庫為例,通常建議使用mysql數據庫,多數據庫連接不在此處討論# postgresql## 安裝postgresql驅動pip install psycopg2-binary#pip install psycopg2## 這裡需要設置postgresql的schema信息,通過options字典指定配置DATABASES = {    'default': {        'ENGINE': 'django.db.backends.postgresql_psycopg2',        'NAME' : 'moon',        'USER': 'postgres',        'PASSWORD': 'postgres',        'HOST':'127.0.0.1',        'PORT': '5432',        'OPTIONS': {                    'options': '-c search_path=myapp'                },    }}# mysql## 安裝mysql驅動pip install pymysql## init文件引入pymysql 用於代理django認可的mysql驅動,同時由於django的版本問題對pymysql的版本存在要求需要增加一個版本欺騙動作import pymysqlpymysql.version_info = (1, 3, 13, "final", 0)pymysql.install_as_MySQLdb()## setting增加mysql連接串配置信息DATABASES = {    'default': {        'ENGINE': 'django.db.backends.mysql',        'NAME':'jay_django_test',        'HOST':'127.0.0.1',        'USER':'root',        'PASSWORD':'qweasd',        'PORT':'3306',    }}/<code> 

7、admin模塊進行數據庫初始化

<code># 執行數據庫遷移python manage.py migrate/<code>

8、創建admin模塊超級管理員角色

<code>python manage.py createsuperuser/<code>

9、檢查simple是否正確引入

<code># 瀏覽器訪問 127.0.0.1:8000/admin 使用admin賬戶登錄確認是否生效/<code>

二、創建APP

1、創建app

<code>python manage.py startapp myapp# 將app註冊到projectINSTALLED_APPS = [    'simpleui',    'django.contrib.admin',    'django.contrib.auth',    'django.contrib.contenttypes',    'django.contrib.sessions',    'django.contrib.messages',    'django.contrib.staticfiles',    'myapp', # 添加到末尾]# 說明:這裡註冊app是整個app的起點,包括後續涉及到數據遷移文件的生成都依賴於註冊列表/<code>

2、創建model

<code># 在app的model創建測試用例的modelimport django.utils.timezone as timezone# Create your models here.class job_detail(models.Model):    ## 定義枚舉值狀態    JOB_TYPE_STATUS_GP = '01'    JOB_TYPE_STATUS_DEFAULT = '02'    JOB_TYPE_STATUS_CHOICES = (        (JOB_TYPE_STATUS_GP, 'Greenplum函數'),        (JOB_TYPE_STATUS_DEFAULT, '其他'),    )    CREATED_BY = models.CharField('創建人',max_length=32) # 創建人    CREATED_TIME = models.DateTimeField('創建時間',default=timezone.now) # 創建時間    UPDATED_BY = models.CharField('更新人',max_length=32) # 更新人    UPDATED_TIME = models.DateTimeField('更新時間',default=timezone.now)  # 更新時間    JOB_TYPE = models.CharField('任務類型',max_length=32,                                choices=JOB_TYPE_STATUS_CHOICES,                                default=JOB_TYPE_STATUS_DEFAULT                                ) # 任務類型 01:gp任務;02:datax任務;03:kafka推送任務;04:http請求任務    JOB_NAME = models.CharField('任務名稱',max_length=128) # 任務名稱    JOB_COMMENT = models.CharField('任務描述',max_length=128)  # 任務描述    IN_PARA = models.CharField('輸入參數定義',max_length=32) # 輸入參數定義 參數使用英文逗號分隔    IN_PARA_COMMENT = models.CharField('輸入參數描述',max_length=1024)  # 輸入參數描述    OUT_PARA = models.CharField('輸出參數定義',max_length=32)  # 輸出參數定義 參數使用英文逗號分隔    OUT_PARA_COMMENT = models.CharField('輸出參數描述',max_length=1024)  # 輸出參數描述    VERSION = models.CharField('版本號',max_length=32) # 版本號    IS_DELETE = models.CharField('是否刪除',max_length=1, default='N')  # 邏輯刪除 Y:刪除;N:正常    PRO_STATUS = models.CharField('發佈狀態',max_length=1,default='N') # 發佈狀態 Y:發佈;N:開發# 生成數據庫遷移文件,生產環境建議指定app進行遷移文件生成,避免未完善功能對已有正常版本的影響python manage.py makemigrations# 執行數據庫遷移python manage.py migrate/<code> 

3、配置路由

<code># 常規的django的web開發一般需要在各個app中創建urls文件,並且將urls路由引入到project的urls中進行統一管理,這裡我們通過admin模塊的路由註冊功能,註冊到admin的路由中# 應用的admin.py中進行model對象註冊from myapp.models import job_detailadmin.site.register(job_detail)/<code>

三、頁面佈局

1、增刪改查model測試

Django+SimpleUI快速開發指南

<code># 此時登錄到頁面上可以發現,剛剛創建的數據表已經作為一個類目在頁面上展示了,但同時會發現一個問題,詳情頁面裡面顯示的並不是字段信息,而是具體的表名稱,此處與我們設想的內容並不匹配。通過這一步驟我們成功驗證了app的註冊方式。具體展示內容,下面的步驟會詳細介紹/<code>

2、admin首頁佈局

Django+SimpleUI快速開發指南

<code># 如上圖所示,首頁基礎展示項目由三個部分組成,往往我們需要對首頁進行定製重寫,這裡我們先把這幾個展示模塊先關閉# project的setting文件最後追加如下設置,即可關閉以上幾個模塊以及信息採集模塊SIMPLEUI_HOME_INFO = FalseSIMPLEUI_HOME_QUICK = FalseSIMPLEUI_HOME_ACTION = FalseSIMPLEUI_ANALYSIS = False# SIMPLEUI_HOME_TITLE = '百度一下你就知道' # 【首頁】按鈕文案配置SIMPLEUI_HOME_PAGE = 'https://www.baidu.com' # 可用於嵌入其他鏈接,這裡可以直接方便的嵌入報表鏈接SIMPLEUI_HOME_ICON = 'el el-icon-platform-eleme'# ICON 支持element-ui和fontawesome  eg:fa fa-user# 圖標ICON 樣式查看https://element.eleme.cn/#/zh-CN/component/iconhttp://www.fontawesome.com.cn/cheatsheet/# 經過實際測試,餓了麼的圖標稍微有點小,而且數量少/<code> 

接下來我們一起看下側邊欄設置,simpleui的側邊欄支持菜單排序,動態菜單等功能

<code># project的setting文件中增加如下配置,icon信息可以參考http://www.fontawesome.com.cn/cheatsheet/SIMPLEUI_CONFIG = {    'system_keep': False, # 關閉系統菜單    'menu_display': ['任務管理', '測試', '權限認證'],      'dynamic': True,    # 設置是否開啟動態菜單, 默認為False. 如果開啟, 則會在每次用戶登陸時動態展示菜單內容    'menus': [{        'app': 'myapp',        'name': '任務管理',        'icon': 'fas fa-user-shield',        'models': [{            'name': '任務管理1',            'icon': 'fa fa-user',            'url': 'job_detail/'        }]    },{        'app': 'auth',        'name': '權限認證',        'icon': 'fas fa-user-shield',        'models': [{            'name': '用戶',            'icon': 'fa fa-user',            'url': 'auth/user/'        }]    }, {        'name': '測試',        'icon': 'fa fa-file',        'models': [{            'name': 'Baidu',            'url': 'http://baidu.com',            'icon': 'far fa-surprise'        }, {            'name': '內網穿透',            'url': 'https://www.wezoz.com',            'icon': 'fab fa-github'        }]    }]}/<code>
Django+SimpleUI快速開發指南

如圖所示,新配置的側邊欄已經生效,但點擊我們自己創建的app的詳情頁面提示404錯誤,從異常信息得知,我們在路由配置上存在問題,系統未能找到我們的路由信息

<code># 問題配置'url': 'job_detail/'# 正確配置'url': 'myapp/job_detail/'# 這裡大家可以思考下,url的配置與常規的urls.py文件的路由顯性引入的異同點/<code>
Django+SimpleUI快速開發指南

3、頁面標題及側邊欄標題定製

<code># 應用的admin.py文件中admin.site.site_header = '數據中心'admin.site.site_title = 'XXX數據中心'admin.site.index_title = u'XXXX數據中心'/<code>
Django+SimpleUI快速開發指南

目前看index_title在simpleui中無效,檢查過simpleui的template文件確實沒使用到這個參數

4、列表查詢頁面定製

<code># admin文件中定義展示頁面,後續方便頁面管理,可以獨立文件,通過import方式引入進行註冊from myapp.models import [email protected](job_detail)class job_detail(admin.ModelAdmin):    # 設置頁面可以展示的字段    list_display = ('JOB_TYPE', 'JOB_NAME','JOB_COMMENT',              'IN_PARA','IN_PARA_COMMENT',              'OUT_PARA','OUT_PARA_COMMENT')    # 默認不配置的話,第一個字段會存在鏈接到記錄編輯頁面    # list_display_links = None    list_display_links = ('JOB_NAME',)    # 設置過濾選項    list_filter = ('JOB_TYPE', 'CREATED_TIME',)    # 每頁顯示條目數 缺省值100    list_per_page = 1    # show all頁面上的model數目,缺省200    # list_max_show_all = 200    # 設置可編輯字段 如果設置了可以編輯字段,頁面會自動增加保存按鈕    list_editable = ('IN_PARA_COMMENT',)    # 按日期月份篩選 該屬性一般不用    # date_hierarchy = 'CREATED_TIME'    # 按發佈日期降序排序    ordering = ('-CREATED_TIME',)    # 搜索條件設置    search_fields = ('JOB_NAME',)    # 表頭字段顯示中文名稱,這裡需要修改models文件,在定義字段的時候增加別名    # eg1:JOB_NAME = models.CharField('任務名稱',max_length=128)    # eg2: name = models.CharField(max_length=30,verbose_name=u"姓名")    # 字段關聯展示    ## 場景1、關聯其他表的數據展示,此處外鍵展示不做演示,生產環境儘量減少外鍵使用    ## 場景2、枚舉信息轉義展示    ###  此處需要在model定義頁面通過枚舉值轉義配置對應展示中文信息,參考model模塊代碼設置    """      這種禁用編輯鏈接的放法只是不讓它在頁面中顯示,即把超鏈接去掉了,      但是還是可以通過手動輸入url的方式來進入編輯頁面。      不過可以配合設置fieldsets或者readonly_fieldss來達到目的      注意:這裡建議刪除按鈕要禁用掉,否則只有擁有view權限的人員依然可以進行刪除動作,或者需要進行人員角色判斷    """    def has_add_permission(self, request):        # 禁用添加按鈕        return True    def has_delete_permission(self, request, obj=None):        # 禁用刪除按鈕        return False/<code> 
Django+SimpleUI快速開發指南

<code>"""這一段主要用於屏蔽 【保存並繼續編輯】以及【保存並新建下一個】的按鈕,不符合用戶習慣同時需要在 類的定義裡面要重寫"""from django.contrib.admin.templatetags.admin_modify import *from django.contrib.admin.templatetags.admin_modify import submit_row as [email protected]_tag('admin/submit_line.html', takes_context=True)def submit_row(context):    ctx = original_submit_row(context)    ctx.update({        'show_save_and_add_another': context.get('show_save_and_add_another', ctx['show_save_and_add_another']),        'show_save_and_continue': context.get('show_save_and_continue', ctx['show_save_and_continue'])        })    return ctx# --- 分割線 ---class job_detail(admin.ModelAdmin):    ... ...    # fields 用於控制編輯頁面內,需要編輯的字段,逐個顯示所有的非AutoField和editable=True    #        這裡可以採用二維元組的方式進行設定對應字段是否在一行顯示,可通過 瀏覽器開發者工具進行查看確認    # fields = (('JOB_NAME', 'JOB_TYPE'), 'JOB_COMMENT')    # fieldsets 是二維元組列表,用於對編輯頁面的佈局,與fields屬性互斥    fieldsets = (        (None, {            'fields': ('JOB_NAME', 'JOB_TYPE', 'JOB_COMMENT')        }),        ('更多操作', {            'classes': ('wide', 'extrapretty',),            'fields': ('IN_PARA', 'OUT_PARA'),        }),    )    save_as_continue = False # 修改完成之後跳轉到元素列表頁面    # 重寫方法屏蔽按鈕    def change_view(self, request, object_id, form_url='', extra_context=None):        extra_context = extra_context or {}        extra_context['show_save_and_add_another'] = False        extra_context['show_save_and_continue'] = False        return super(job_detail, self).change_view(request, object_id,            form_url, extra_context=extra_context)/<code>
Django+SimpleUI快速開發指南

6、頁面按鈕權限配置

<code># django admin 的權限模塊 默認提供了增刪改查的權限配置curr_per_set = {'myapp.view_job_detail','myapp.delete_job_detail','myapp.add_job_detail','myapp.change_job_detail'}# 而當我們以下圖為例:僅僅給某個用戶賦權 查詢 權限的時候,該用戶還存在新增按鈕的權限,對已有數據無操作權限,此處啟發我們需要去思考頁面上面按鈕權限如何跟具體角色進行關聯# 當然 django admin 同樣支持自定義權限,此處不再討論/<code>
Django+SimpleUI快速開發指南

<code># 這裡演示了根據不同用戶角色決定是否在頁面上顯示相應的功能按鈕class job_detail(admin.ModelAdmin):    ... ...    def has_add_permission(self, request):        user_per_set = request.user.get_all_permissions() # 獲取當前用戶權限        # 待判斷的權限範圍        curr_per_set = {'myapp.view_job_detail','myapp.delete_job_detail','myapp.add_job_detail','myapp.change_job_detail'}        if 'myapp.add_job_detail' in curr_per_set.intersection(user_per_set):            return True        else:            return False/<code>
Django+SimpleUI快速開發指南

前文中我們已經介紹了簡單的編輯頁面的排版展示功能,接下來會更加詳細的介紹編輯頁面的排版,方便大家按照各自功能進行定製化開發

<code># filesets的樣式及描述文案    fieldsets = (        (None, {            'fields': ('JOB_NAME', 'JOB_TYPE', 'JOB_COMMENT')        }),        ('更多操作', {            'classes': ('wide', 'extrapretty',),            'fields': ('IN_PARA', 'OUT_PARA'),        }),    )# 這裡我們通過classes進行fileset的樣式定製,常用的主要有 collaspe和wide,collaspe是將fieldset進行摺疊,wide主要是增加水平空間,但這兩個參數在simpleui中無用處(可能是我們的姿勢不對)# 添加文案說明fieldsets = (        (None, {            'fields': ('JOB_NAME', 'JOB_TYPE', 'JOB_COMMENT')        }),        ('更多操作', {            'classes': ('collaspe',),            'fields': ('IN_PARA', 'OUT_PARA'),            'description': ' 

輸入輸出參數描述文案

', }), )# 這裡可以發現 其實我們可以填充html語法,頁面同樣會直接進行渲染# 那針對每個單元格的描述應該怎麼操作呢?這裡我們需要通過對models的help_text的屬性添加,一般這個功能用於針對某個具體的字段的使用說明上IN_PARA = models.CharField('輸入參數定義',max_length=32,help_text=u'例如:按照這個樣子')/<code>
Django+SimpleUI快速開發指南

<code># 多對多選擇框 一般用於增加標籤等方式上,但需要注意的是這個針對的many-to-many類型字段## 這裡務必要重寫__str__方法,否則頁面將不會展示具體內容class job_tags(models.Model):    title = models.CharField(max_length=30)    def __str__(self):        return self.titleclass job_detail(models.Model):    ... ...    TAG = models.ManyToManyField(job_tags)## 此時進行數據庫遷移操作,系統會同時創建一張關係表# admin.py中添加filter_horizontal = ('TAG',)/<code> 
Django+SimpleUI快速開發指南

Django+SimpleUI快速開發指南

<code># 列表頁面如何顯示 多對多 這種類型的字段,通過自定義函數進行返回詳情以及描述    def tag_list(self):        return ', '.join([a.title for a in self.TAG.all()])    tag_list.short_description = '標籤'# admin.pylist_display = ('JOB_TYPE', 'JOB_NAME','JOB_COMMENT',              'IN_PARA','IN_PARA_COMMENT',              'OUT_PARA','OUT_PARA_COMMENT','tag_list')/<code>
Django+SimpleUI快速開發指南

<code># 只讀字段readonly_fields = ("CREATED_BY",'CREATED_TIME',) /<code>
Django+SimpleUI快速開發指南

<code># 自動填充字段 eg:修改某條記錄時,自動填充修改人為登錄用戶# 時間字段處理,需要在model中指定,例如自動更新時間需要增加 auto_now屬性,django使用的時間函數 timezone.now    CREATED_BY = models.CharField('創建人',max_length=32) # 創建人    CREATED_TIME = models.DateTimeField('創建時間',default=timezone.now) # 創建時間    UPDATED_BY = models.CharField('更新人',max_length=32) # 更新人    UPDATED_TIME = models.DateTimeField('更新時間',auto_now = True)  # 更新時間# 獲取登錄人員信息,進行填充,需要重寫save_model方法,同時記得設定成只讀字段    def save_model(self, request, obj, form, change):        if change: # 判斷當前是修改狀態還是新增狀態            obj.UPDATED_BY = request.user.username            obj.save()        else:            obj.CREATED_BY = request.user.username            obj.UPDATED_BY = request.user.username            obj.save()    readonly_fields = ("CREATED_BY",'CREATED_TIME','UPDATED_BY','UPDATED_TIME',) ## 這裡需要注意的是 獲取request人員屬性的方法/<code>
Django+SimpleUI快速開發指南

<code># 級聯修改 一對多關聯 一般用於維度表配置展示## 利用外鍵,在多的一方,字段指定外鍵即可,但定義一對多的關係時候需要指定刪除方式new_column = models.ForeignKey('Rela_table', on_delete=models.PROTECT)## models.CASCADE 此為默認值,級聯刪除,會刪除關聯數據## models.PROTECT 只要存在關聯數據就不能刪除## models.DO_NOTHING 什麼也不做### 子表中定義外鍵rela_id = models.ForeignKey("job_rela", on_delete=models.DO_NOTHING,default=9999, verbose_name="選擇唯一一個父親")### 定義依賴的父表class job_rela(models.Model):    rela_name = models.CharField('依賴名稱',max_length=128) # 任務名稱    rela_id = models.CharField('任務編號', max_length=32)  # 任務名稱    def __str__(self):        return self.rela_name### admin中增加顯示該字段即可# 特殊的一對多,例如:行政區劃parent = models.ForeignKey('self', verbose_name='上級行政區劃')/<code> 
Django+SimpleUI快速開發指南

<code># 只顯示當前登錄用戶自己的數據,超出範圍不允許查看    def get_queryset(self, request):        qs = super(job_detail, self).get_queryset(request)        if request.user.is_superuser:            return qs        return qs.filter(CREATED_BY=request.user.username)/<code>
Django+SimpleUI快速開發指南

<code># 列表頁部分展示字段顯示不同顏色## model中定義字段顏色,通過函數定義    def colored_name(self):        if self.PRO_STATUS == 'Y':            cl_name = 'red'        else:            cl_name = 'blue'        return format_html(            '{}',            cl_name,            self.PRO_STATUS,        )    colored_name.short_description = '狀態'## admin中直接引入即可 這裡一個大括號代表一個入參/<code>
Django+SimpleUI快速開發指南

8、集成富文本編輯器實現數據字典展示功能

<code># 創建數據字典的model信息,包含主表以及字段表,其中主表跟字段表通過主外鍵進行一對多的關聯class dict_table(models.Model):    table_name = models.CharField(max_length=64,verbose_name='表名稱')    table_comment = models.CharField(max_length=256,verbose_name='描述')    table_short_desc = models.CharField(max_length=128,verbose_name='簡述')    create_time = models.DateTimeField(verbose_name='創建時間',default=timezone.now())    owner = models.CharField(verbose_name='歸屬人',default='admin',max_length=64)    update_time = models.DateTimeField(verbose_name='修改時間',auto_now=True)    description = models.TextField(verbose_name='備註')    def __str__(self):        return self.table_name    class Meta:        verbose_name = '字典表'        verbose_name_plural = '字典表'class dict_columns(models.Model):    table_id = models.ForeignKey('dict_table',on_delete=models.CASCADE,verbose_name='關聯表主鍵')    column_name = models.CharField(max_length=128,verbose_name='字段名稱')    column_comment = models.CharField(max_length=128,verbose_name='字段含義及說明')    def __str__(self):        return ''    class Meta:        verbose_name = '字段詳情'        verbose_name_plural = '字段詳情'# 添加測試記錄/<code> 
<code># admin文件中創建表名的列表頁並且註冊到路由中class dict_columns(admin.TabularInline):    model = dict_columns    can_delete = False    show_change_link = False    extra = 1    editable_fields = []    list_display = ['column_name','column_comment']    list_display_links = ()    readonly_fields = ['column_name','column_comment']    original = False    def has_add_permission(self, request,obj=None):        user_per_set = request.user.get_all_permissions() # 獲取當前用戶權限        # 待判斷的權限範圍        curr_per_set = {'myapp.view_dict_columns','myapp.delete_dict_columns','myapp.add_dict_columns','myapp.change_dict_columns'}        if 'myapp.add_dict_columns' in curr_per_set.intersection(user_per_set):            return True        else:            return [email protected](dict_table)class dict_table(admin.ModelAdmin):    list_display = ('table_name', 'table_short_desc', 'create_time',                    'owner')    list_display_links = ('table_name',)    list_filter = ('table_name',)    def has_add_permission(self, request,obj=None):        user_per_set = request.user.get_all_permissions() # 獲取當前用戶權限        # 待判斷的權限範圍        curr_per_set = {'myapp.view_dict_table','myapp.delete_dict_table','myapp.add_dict_table','myapp.change_dict_table'}        if 'myapp.add_dict_table' in curr_per_set.intersection(user_per_set):            return True        else:            return False    def has_delete_permission(self, request, obj=None):        return False    save_as_continue = False  # 修改完成之後跳轉到元素列表頁面    def change_view(self, request, object_id, form_url='', extra_context=None):        extra_context = extra_context or {}        extra_context['show_save_and_add_another'] = False        extra_context['show_save_and_continue'] = False        return super(dict_table, self).change_view(request, object_id,                                                   form_url, extra_context=extra_context)    fieldsets = (        ('基本信息', {            'fields': ('table_name', 'create_time', 'owner','update_time')        }),        ('說明', {            'fields': ('description', )        }),    )    readonly_fields = ("table_name", 'create_time', 'owner', 'update_time',)    inlines = [dict_columns,]/<code>
Django+SimpleUI快速開發指南


9、自定義按鈕實現導入導出功能

<code># 出處:參考simpleui官方文檔        # 增加自定義按鈕    actions = ['custom_button']    def custom_button(self, request, queryset):        pass    # 顯示的文本,與django admin一致    custom_button.short_description = '測試按鈕'    # icon,參考element-ui icon與https://fontawesome.com    custom_button.icon = 'fas fa-audio-description'    # 指定element-ui的按鈕類型,參考https://element.eleme.cn/#/zh-CN/component/button    custom_button.type = 'danger'    # 給按鈕追加自定義的顏色    custom_button.style = 'color:black;'    # 鏈接按鈕,設置之後直接訪問該鏈接    # 3中打開方式    # action_type 0=當前頁內打開,1=新tab打開,2=瀏覽器tab打開    # 設置了action_type,不設置url,頁面內將報錯    # 設置成鏈接類型的按鈕後,custom_button方法將不會執行。    custom_button.action_type = 1    custom_button.action_url = 'http://www.baidu.com'/<code> 
Django+SimpleUI快速開發指南


10、Echart組件引入以及頁面個性化調整

<code># django admin 支持自定義template,大部分情況下我們是需要重新修改 change頁面class RecordAdmin(admin.ModelAdmin):    change_form_template = 'admin/extras/record_change_form.html'    ...# 這個我們定義的頁面需要繼承 {% extends "admin/change_form.html" %}# 在urls.py中添加一條對應的url信息以及對應的view函數進行處理渲染/<code>

四、應用部署步驟

Step1、安裝ngnix

Step2、安裝uwsgi

Step3、配置uwsgi

Step4、配置ngnix

Step5、啟動服務


至此,我們已經基本上把django+simpleui的快速開發方式介紹了一遍,基本上能夠滿足一個創業團隊或者小型團隊的快速工具化的需求。其餘基於django使用技巧以及部分源碼解讀也會在後續其他文章中放出。

2020.03.15


分享到:


相關文章: