CRM stark组件

  1. 开启新项目:CRM
  2. 再创建一个应用app02(python manage.py startapp app02 或者是工具栏:run...task:执行startapp app02)
  3. settings.py:INSTALLED_APPS配置:
  • 'app01.apps.App01Config',
  • 'app02.apps.App02Config',
  1. 看apps.py是否有自动生成对应的

    class App01Config(AppConfig):

    name = 'app01'

  2. 2个应用的models.py:写入对应的表结构

    1. - 表结构后面要加:
    2. def __str__(self):
    3. return self.表名的title/name/...字段
    4. - 并执行:
    5. - >>>makemigrations
    6. - >>>migrate
  3. 注册:admin就是Django封装好的一个app而已:

    • admin.py(app01)
    • from .models import 表名
    • admin.site.register(表名)
    • admin.py(app02)
    • from .models import 表名
    • admin.site.register(表名)
  4. 启动应用,访问:127...../admin 要用户名和密码

  5. createsuperuser

  6. 重启项目再次访问

    • 查url:admin/app0.../表名
    • 增url:admin/app0.../add
    • 改url:admin/app0.../change
    • 删url:admin/app0.../delete

以上就一行代码:增删改查所有都实现了,额外增加业务,只需要设计表结构就行了,我们的目标是自定义stark组件,学习源码:(既然是通过register()来实现的,我们先看register)

  • 1启动每个app下的admin.py

  • 2注册

  • def register(self,model_or_iterable,admin_class=None,**options):

  • admin_class = admin_class or ModelAdmin

  • [ModelAdim]:ModelAdim配置类

1, Django默认显示字段##

admin.py

  1. class 表名Config(admin.ModelAdmin):--->继承
  2. pass--->用了pass就代表默认用系统的
  3. admin.site.register(表名,表名Config)--->默认用系统的

注意:不能重复register(表名)注册

2,自定义要显示的字段

admin.py

  1. class 表名Config(admin.ModelAdmin):>>>>>继承ModelAdmin
  2. list_display=['name','city','email']---->控制页面(字段)显示
  3. admin.site.register(表名, 表名Config)>>>>>生成新的表格结构

3,显示关联表的字段(有多个,特殊)

admin.py

  1. class BookConfig(admin.ModelAdmin):
  2. def show_authors(self,obj):
  3. return ",".join([obj.name for obj in obj.authors.all()])
  4. list_display = ['title','pub_date','price',"show_authors"]
  5. admin.site.register(Book,BookConfig)

4,自定义接口

  1. class BookConfig(admin.ModelAdmin):
  2. def del_action(self,obj):
  3. return '<a href=''>删除</a>'
  4. list_display = ["title","del_action"]
  5. admin.site.register(Book,BookConfig)

Django的安全措施:a标签全部会显示,解决方案:

  1. from django.utils.safestring import mark_safe
  2. class BookConfig(admin.ModelAdmin):
  3. def del_action(self,obj):
  4. return mark_safe('<a href=''>删除</a>')
  5. list_display = ["title","del_action"]
  6. admin.site.register(Book,BookConfig)

admin定制

方式一:

  1. class PublishConfig(admin.ModelAdmin):
  2. list_display = ('name', 'city', 'email')
  3. admin.site.register(Publish,PublishConfig) # 第一个参数可以是列表

方式二:

  1. @admin.register(Publish) # 第一个参数可以是列表
  2. class PublishConfig(admin.ModelAdmin):
  3. list_display = ('name', 'email', 'city')

可定制功能

  1. 1. list_display=['','']按XX字段显示(1.0是放函数名.2.0是放函数名的字符串)
  2. @admin.register(Book)
  3. class BookConfig(admin.ModelAdmin):
  4. list_display = ('title', 'price', 'authors')
  5. def xxxxx(self, obj):
  6. return "xxxxx"
  7. 2. list_display_links,列表时,定制列可以点击跳转。
  8. @admin.register(Book)
  9. class BookConfig(admin.ModelAdmin):
  10. list_display = ('title', 'price', 'authors')
  11. list_display_links = ('title',)
  12. 3. list_filter=['xx']过滤某个字段
  13. - 一般不这么用,'10万本书'
  14. - 一般按1对多的字段过滤list_filter=['publish']
  15. - 多对多:list_filter==['publish','authors']
  16. 4. list_select_related,列表时,连表查询是否自动select_related
  17. 5. list_editable,列表时,可以编辑的列 直接可在该字段下面所有值进行修改编辑
  18. @admin.register(Book)
  19. class BookConfig(admin.ModelAdmin):
  20. list_display = ('title', 'price', 'authors')
  21. list_editable = ('title',)
  22. 6. search_fields,列表时,模糊搜索的功能
  23. @admin.register(Book)
  24. class BookConfig(admin.ModelAdmin):
  25. search_fields = ('title', 'price')
  26. 7. date_hierarchy,列表时,对DateDateTime类型进行搜索
  27. @admin.register(Book)
  28. class UserAdmin(admin.ModelAdmin):
  29. date_hierarchy = 'pub_date'
  30. 8. action,列表时,定制action中的操作 short_description命名
  31. class BookConfig(admin.ModelAdmin):
  32. list_display = ["title", 'price', 'pub_date', "publish"]
  33. def patch_init(self, request, queryset):
  34. queryset.update(price=100)
  35. patch_init.short_description = "批量初始化" # 命名
  36. actions = [patch_init, ]
  37. admin.site.register(Book, BookConfig)
  38. 9. 定制HTML页面
  39. class BookConfig(admin.ModelAdmin):
  40. list_display = ["title", 'price', 'pub_date', "publish"]
  41. change_list_template = "mylist.html"
  42. admin.site.register(Book,BookConfig)
  43. 10. 排序(降序-)
  44. class BookConfig(admin.ModelAdmin):
  45. list_display = ["title", 'price', 'pub_date', "publish"]
  46. ordering = ["-price"]
  47. admin.site.register(Book,BookConfig)
  48. 11. inlines,详细页面,如果有其他表和当前表做FK,那么详细页面可以进行动态增加和删除
  49. 12. 显示多对多:author和外键publish字段
  50. class BookConfig(admin.ModelAdmin):
  51. def show_authors(self,obj):
  52. return ",".join([obj.name for obj in obj.authors.all()])
  53. list_display = ['title','pub_date','price','publish',"show_authors"]
  54. ordering = ['-price']
  55. admin.site.register(Book,BookConfig)

路由一级分发

urls.py

  1. path('index/',([
  2. path('test01/',views.test01),
  3. path('test02/',views.test02)],
  4. None,
  5. None)),---->None必须写

views.py

  1. def test01(request):
  2. return HttpResponse('test01')
  3. def test02(request):
  4. return HttpResponse('test02')

浏览器:...index/test01

路由二级分发

![](https: // img2018.cnblogs.com / blog / 1523703 / 201901 / 1523703 - 20190118145157917 - 1003858455.png)

二级分发应用

urls.py

  1. from django.contrib import admin
  2. from django.urls import path,re_path
  3. from django.conf.urls import url
  4. from django.shortcuts import HttpResponse
  5. def add_view(request):
  6. return HttpResponse("add_view...")
  7. def list_view(request):
  8. return HttpResponse("list_view...")
  9. def change_view(request,id):
  10. return HttpResponse("change_view...")
  11. def delete_view(request,id):
  12. return HttpResponse("delete_view...")
  13. def get_urls2():
  14. temp=[
  15. path('', list_view),
  16. path('add/', add_view),
  17. re_path('(\d+)/change/', change_view),
  18. re_path('(\d+)/delete/', delete_view),
  19. ]
  20. return temp
  21. def get_urls():
  22. print("------>",admin.site._registry) # 键值对
  23. #{Book:BookCongfigObj,Publish:PublishConfigObj,.....}
  24. temp = []
  25. for model,config_obj in admin.site._registry.items():
  26. model_name=model._meta.model_name
  27. app_label=model._meta.app_label
  28. temp.append(
  29. path('%s/%s/' % (app_label, model_name),
  30. (get_urls2(),None,None)),
  31. )
  32. return temp
  33. urlpatterns = [
  34. path('yuan/',(get_urls(),None,None)),
  35. ]

CRM2Stark组件的更多相关文章

  1. ExtJS 4.2 评分组件

    上一文章是扩展ExtJS自带的Date组件.在这里将创建一个评分组件. 目录 1. 介绍 2. 示例 3. 资源下载 1. 介绍 代码参考的是 Sencha Touch 2上的一个RatingStar ...

  2. react组件的生命周期

    写在前面: 阅读了多遍文章之后,自己总结了一个.一遍加强记忆,和日后回顾. 一.实例化(初始化) var Button = React.createClass({ getInitialState: f ...

  3. react-router 组件式配置与对象式配置小区别

    1. react-router 对象式配置 和 组件式配置    组件式配置(Redirect) ----对应---- 对象式配置(onEnter钩子) IndexRedirect -----对应-- ...

  4. Angular2入门系列教程3-多个组件,主从关系

    上一篇 Angular2项目初体验-编写自己的第一个组件 好了,前面简单介绍了Angular2的基本开发,并且写了一个非常简单的组件,这篇文章我们将要学会编写多个组件并且有主从关系 现在,假设我们要做 ...

  5. Angular2入门系列教程2-项目初体验-编写自己的第一个组件

    上一篇 使用Angular-cli搭建Angular2开发环境 Angular2采用组件的编写模式,或者说,Angular2必须使用组件编写,没有组件,你甚至不能将Angular2项目启动起来 紧接着 ...

  6. .NET Core 首例 Office 开源跨平台组件(NPOI Core)

    前言 最近项目中,需要使用到 Excel 导出,找了一圈发现没有适用于 .NET Core的,不依赖Office和操作系统限制的 Office 组件,于是萌生了把 NPOI 适配并移植到 .NET C ...

  7. .NetCore中的日志(1)日志组件解析

    .NetCore中的日志(1)日志组件解析 0x00 问题的产生 日志记录功能在开发中很常用,可以记录程序运行的细节,也可以记录用户的行为.在之前开发时我一般都是用自己写的小工具来记录日志,输出目标包 ...

  8. BootStrap_02之全局样式及组件

    1.BootStrap指定的四种屏幕尺寸: ①超大PC屏幕--lg(large):w>=1200px: ②中等PC屏幕--md(medium):1200px>w>=992px: ③P ...

  9. ExtJS 4.2 组件介绍

    目录 1. 介绍 1.1 说明 1.2 组件分类 1.3 组件名称 1.4 组件结构 2. 组件的创建方式 2.1 Ext.create()创建 2.2 xtype创建 1. 介绍 1.1 说明 Ex ...

随机推荐

  1. Python初学者第二天 用户输入和注释

    2day Python基础语法: 1.用户输入和注释 用户输入:   代码注释:# 注释部分不会被执行,或用来帮助理清代码逻辑   2.数据类型:数字 int:整数   long:长整形  注:Pyt ...

  2. Struts2学习-自动

    和ssh框架的基本一致. <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...

  3. python 切片&迭代

    Python提供了切片(Slice)操作符L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']取前3个元素>>> L[0:3]['Mich ...

  4. VMware workstation 虚拟机安装帮助文档(以windows server 2003为例)

    本次安装以Windows server 2003为例: 1.在桌面上双击VMware快捷方式打开,并点击文件>新建虚拟机 2.这里选择默认的“典型”,点击下一步 3.选择浏览,找到windows ...

  5. 通过ajax获取一个多位数,当容器显示在屏幕可视区时,让数字以滚动的形式显示

      { "data": "268" } json数据 <!DOCTYPE html> <html> <head lang=&quo ...

  6. WAS部署 -- SRVE0255E: 尚未定义要处理 /snoop 的 Web 组/虚拟主机

    问题描述: URL:http://localhost:9080/pay: (中文)SRVE0255E: 尚未定义要处理 /snoop 的 Web 组/虚拟主机 访问出现以上错误. 找了很多资料,觉得说 ...

  7. PHP---练习-----留言板

    题目::留言显示 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...

  8. 几句代码简单实现IoC容器

    前言 最近在调试EasyNetQ代码的时候发现里面有一段代码,就是IoC容器的简单实现,跟着他的代码敲了一遍,发现了奇妙之处.当然也是因为我才疏学浅导致孤陋寡闻了.他的思路就是通过动态调用构造函数生成 ...

  9. Yii2控制器 返回 json 格式数据

    Yii::$app->response->format = Response::FORMAT_JSON; $data = User::find()->where([])->as ...

  10. java序列化报错

    Main.javat mainsr &java.util.Collections$UnmodifiableList�%1�� L listq ~xr ,java.util.Collection ...