# stark
**Repository Path**: caimengzhi/stark
## Basic Information
- **Project Name**: stark
- **Description**: stark
- **Primary Language**: Python
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2019-05-23
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
stark组件
- 介绍
- stark组件,是一个帮助开发者快速实现数据库表的增删改查+的组件。
- 目标:
- 10s 中完成一张表的增删改查。
- `django`项目启动时,自定义执行某个`py`文件。
```
django启动时,且在读取项目中 路由加载 之前执行某个py文件。
在任意app的apps.py中的Config类中定义ready方法,并调用autodiscover_modules
from django.apps import AppConfig
from django.utils.module_loading import autodiscover_modules
class App01Config(AppConfig):
name = 'app01'
def ready(self):
autodiscover_modules('xxxx')
django在启动时,就会去已注册的所有app的目录下找 xxxx.py 并自动导入。
如果执行两次,是因为django内部自动重启导致:
python manage.py runserver 120.0.0.1:8001 --noreload
提示:
如果xxxx.py执行的代码向 “某个神奇的地方” 放入了一些值。之后的路由加载时,可以去“某个神奇的地方”读取到原来设置的值。
```
- 单例模式
```
单,一个。
例,实例、对象。
通过利用Python模块导入的特性:在Python中,如果已经导入过的文件再次被重新导入时候,python不会再重新解释一遍,而是选择从内存中直接将原来导入的值拿来用。
xxxx.py
class AdminSite(object):
pass
site = AdminSite() # 为AdminSite类创建了一个对象(实例)
app.py
import utils
print(utils.site)
import utils
print(utils.site)
提示:
如果以后存在一个单例模式的对象,可以先在此对象中放入一个值,然后再在其他的文件中导入该对象,通过对象再次讲值获取到。
```
- django路由分发的本质:include
```
方式一:
from django.conf.urls import url,include
urlpatterns = [
url(r'^web/', include("app01.urls")),
]
方式二:
include函数主要返回有三个元素的元组。
from django.conf.urls import url,include
from app01 import urls
urlpatterns = [
url(r'^web/', (urls, app_name, namespace)), # 第一个参数是urls文件对象,通过此对象可以获取urls.patterns获取分发的路由。
]
在源码内部,读取路由时:
如有第一个参数有:urls.patterns 属性,那么子路由就从该属性中后去。
如果第一个参数无:urls.patterns 属性,那么子路由就是第一个参数。
方式三:
urlpatterns = [
url(r'^web/', ([
url(r'^index/', views.index),
url(r'^home/', views.home),
], app_name, namespace)), # 第一个参数是urls文件对象,通过此对象可以获取urls.patterns获取分发的路由。
]
```
## 2. 组件开发
- 创建 `django` project
- 创建基础的业务表
- app01
- 部门表
- 用户表
- app02
- 主机表
- 三张表增删改查
- 分析
- 为每张表创建4个url
- 为每张表创建4个视图函数
app01/models.py
- Depart
- /app01/depart/list/
- /app01/depart/add/
- /app01/depart/edit(\d+)/
- /app01/depart/del(\d+)/
- UserInfo
- /app01/userinfo/list/
- /app01/userinfo/add/
- /app01/userinfo/change(\d+)/
- /app01/userinfo/del(\d+)/
app02
- Host
- /app02/host/list/
- /app02/host/add/
- /app02/host/change(\d+)/
- /app02/host/del(\d+)/
- 创建
b. 为app中的每个model类自动创建URL和相关视图函数
- 动态生成url
- 将视图提取到基类
- URL分发扩展& URL前缀或者后缀
- 为URL 设置别名
- URL别名进行重新生成
c.定制页面显示的列
- 基本完成列表页面的定制
- 页面上的列
- 没有定义list_display字段的页面,默认显示对象
- 定义list_display字段的页面,就按照定制的显示
- 为页面显示的列预留一个钩子函数
- 为页面提供自定义显示[函数实现]
- 应用模板样式[bootstrap]
- 为列表页面添加分页功能
- 添加
- 如何显示添加按钮 钩子函数
- 添加按钮的URL
- 添加页面进行添加数据
- 编辑
- 编辑按钮,删除按钮
- 页面操作
- 删除
- 其他常用功能
- 排序 orm中orderby
- 模糊搜索
- 实现流程 在页面上设置form表单,以get形式提交请求到后台,后台获取数据然后进行数据筛选
后端获取到关键字之后没根据定义进行查找(多列的话,可以按照或进行查找)
- 模糊搜索Q对象
- 批量操作
- 添加checkbox``
- 生成批量操作的按钮
- 组合搜索
- 什么是组合搜索
- 如何实现组合搜索
- 实现思路 根据字段找到其他关联的数据,choice,FK,M2M2
- 第一步: 配置
- 第二步: 根据配置获取关联数据
- 第三步: 根据配置获取关联数据 [含条件]
- 第四步: 在页面上显示组合搜索的按钮
- 1: 将queryset和元组进行封装
- 第五步: 为组合搜索生成URL
- 1: 生成URL时候,不影响其他组的条件
- 2: 条件删选
- 3: 多选
- 总结:
- 页面: 列表,添加,编辑,删除
- 模糊搜索,批量操作,组合搜索