curd 插件

先将model类注册到_regitry={} 循环生成url


程序启动 会自动执行app中apps.py和admin.py(apps.py先执行)



1. 创建项目和app

	settings.py 和 urls.py注释 django自有的
	python3 manage.py startapp app02
	python3 manage.py startapp app03
	python3 manage.py startapp yingun

2. model类注册

	app01 和 app02 创建类 并注册
	python3 manage.py makemigrations
   	python3 manage.py migrate


   	1. 在yungun中app.py自动注册yg.py(这样其余app中的yg.py会在程序开始运行)
   	2. 在yungun中创建service/v1.py 实现注册类的功能
    3. app01中models.py中创建表
    4. app01中yg.py注册类
    5. yungun中service/v1.py 生成:

		{
		    UserInfo类 : BaseYinGunAdmin(UserInfo类,YinGunSite对象)
		    Role类 : BaseYinGunAdmin(Role类,YinGunSite对象)
		}
	6. app02中models.py中创建表 和注册类

4. 循环生成URL
   	include 如果参数是模块路径?导入模块,找打urlpatterns对象的列表

5. 反向生成URL 注意namespace

6. 表格显示表头
	- 可以显示中文

7. 增加功能

	- 获取 /yg/app01/userinfo/add/
		- add_url = reverse("{2}:{0}_{1}_add".format(self.app_lable,self.model_name,self.site.namespace))

	- 拼接 /yg/app01/userinfo/add/?page=1&name=alex&id=666
		- Base_url = add_url + "?" + request.GET.urlencode()

	- 解决后面的参数不重复
		- /yg/app01/userinfo/add/?_changelistfilter=page%3D1%26id%3D666%26name%3Dfangshaowei

		    from django.http.request import QueryDict   # request.GET 是 QueryDict 的对象
	        param_dict = QueryDict(mutable=True)        #创建QueryDict对象, 加上mutable=True参数后,可以修改内部元素
	        param_dict['_changelistfilter'] = request.GET.urlencode()
	        base_add_url = reverse("{2}:{0}_{1}_add".format(self.app_lable,self.model_name,self.site.namespace))
        	add_url = "{0}?{1}".format(base_add_url,param_dict.urlencode())

    - 利用 MyModelForm() 增加数据


8. 编辑功能


9. 分页
	- 保留url中搜索条件


10. 动作

11. 组合搜索




############# curd #############

	具体功能
		1. 参考Django的admin 开发自定义组件 (admin 功能不全)
			定义插件终极目标:
				- 适用于所有web框架的CURD插件:
					Django[orm]
					tornado[SQLAchemy]
					flask[SQLAchemy]
					bottle[SQLAchemy]

			什么是ORM框架:
				- 关系对象影射,告别原生SQL,基于类和对象操作数据
				  类   -> 表
				  对象 -> 行
				  属性 -> 列

			为什么使用ORM框架?
				优点
					- 不写SQL语句,快速开发
				缺点
					- 性能低
		
		2. 启动文件:
			AppConfig:
				def ready()
					xxxxx
					
		3. URL:
			include本质:[url列表]  appname   namespace
			
			PS: namespace
			
		4. 单例模式:
			文件
			
			get_instance()
			
			__new__
			
			PS: metaclass
			
		5. site:
			registry = {
			
				UserInfo: Base(site,UserInfo)
				Role: Sun(site,UserInfo)
			}
			
			循环进行URL注册
			
		6. 字段
			根据类: 
					获取app名称
					获取表名称
					获取字段:
						字段对象 = UserInfo._meta.get_field('user')
						
						字段对象.model
						字段对象.rel.model
						
		7. 反向生成URL
		
		
		8. request.GET
			- 默认不可修改
			- {k:[1,2,3]}
			
		9. ModelForm
			- 基本用法
			- type创建类
			
		10. 面向对象
			class:
				__init__
					self.namespace
					
					
				xxxxx

			class:
				__iter__
				
				
		11. popup
		
		12 simple_tag,inclusion_tags
		
		13. 功能:
			
			列表页面:
				列表定制列: 列名,函数
				Action:   函数
				组合搜索:   列名,函数
			添加页面:
				ModelForm
			
			编辑页面:
				ModelForm
				
			删除页面:
			
			查看详细:
			
			
			PS: 保留原来URL

  

原文地址:https://www.cnblogs.com/golangav/p/7566864.html