13

1、stark - 总结

(单例,继承,反射,面向对象,modelform 应用得很好!!)

1.注册表
单例模式 site = StarkSite()

2.生成url
url(r'^stark/', ([],None,None))

3.数据列表展示
可自定义配置显示:
list_display = ["__str__"]
list_display_links = []
modelform_class = []
search_fields = []
actions = []
list_filter = []

4.增删改页面 modelform

5.分页
自定义分页组件 stark/utils/page.py
class Pagination(object):
...
...

6.search模糊查询
Q查询 or
search_connection = Q()
...
data_list = self.model.objects.all().filter(search_connection)

7.action批量处理
def patch_init(self, request, queryset):
queryset.update(price=123)
...
patch_init.short_description = "批量初始化"

actions = [patch_init]

queryset = self.model.objects.filter(pk__in=selected_pk)

8.filter过滤
list_filter = ['title','publish', 'authors']
eg:{"publish":["<a href=''>全部</a>","<a href=''>南京出版社</a>","<a href=''>上海出版社</a>"]
"authors":["<a href=''>全部</a>","<a href=''>yuan</a>","<a href=''>egon</a>"]
}

Q查询 and
filter_condition = Q()
data_list = self.model.objects.all().filter(search_connection).filter(filter_condition)

9.pop弹出
在一对多和多对多字段后渲染 +
+对应的跳转路径
保存添加记录同时,将原页面的对应的下拉菜单中添加该记录

2、各种小知识点

from django.test import TestCase

# Create your tests here.

#
# class  A(object):
#
#     x=12
#     def __init__(self,m):
#         self.z = m
#     def xxx(self):
#         print(self.x)
#         print(self.z)
#
# class B(A):
#     x=5
#     z = 11
#
# b=B(10)
# b.xxx()

#######################################
#
# class Person(object):
#     def __init__(self,name):
#         self.name = name
#
# alex = Person('alex')
# print(alex.name)
#
# s = 'name'
#
# # print(alex.s)  # 用反射
#
# getattr(alex,s)
#
# print(getattr(alex,s))

#######################################
 # 没学面向对象之前,都是函数 ,

# 函数 方法

# class Person(object):
#     def __init__(self,name):
#         self.name = name
#
#     def eat(self):  # 方法!
#         print(self)
#         print('eating...')
#
# # 实例方法
# # egon = Person('egon')
# # egon.eat()
#
# # 函数
# Person.eat('ss')

#######################################

# list = [1,2,3]
# list.append(4)
# print(list)
# list.insert(0,100)
# print(list)

#######################################
# li = []
# print(len(li))
#
# s = "sss"
# print(isinstance(s,str))

#######################################

# class Person(object):
#     def __init__(self,name):
#         self.name = name
#
#     def __str__(self):
#         return self.name
#
# alex = Person('alex')
# # print(alex.name)
# # print(alex)
#
# print(alex.__str__())
# print(str(alex))
#
# print(getattr(alex,'__str__')())


#######################################
# temp = []
# temp.append(1)
# temp.extend([1,2,3])
# print(temp)

#######################################

# def foo():
#     return
#
# print(foo.__name__)


#######################################
# 查询是字段名称
# Book.objects.filter(Q(title='yuan')|Q(price='123'))

# Q() 查询放str,
# q = Q()
# q.connection = 'or'
# q.children.append(('title','yuan'))
# q.children.append(('price',123))

#######################################

# ret = self.model.objects.filter(title__startswith='py')
# ret = self.model.objects.filter(price__in=[123, 111, 21, 11])
# ret = self.model.objects.filter(price__range=[10, 100])
# ret = self.model.objects.filter(title__contains='y')
# ret = self.model.objects.filter(title__contains='o')
# ret = self.model.objects.filter(title__icontains='o')
# print(ret)
# return HttpResponse('ok')

#######################################

# def foo():
#     print('ok')
#
# print(foo.__name__)
# print(type(foo.__name__))
# foo.desc = '123'
# print(foo.desc)
# a = foo()
# a.desc = 12
# print(a.desc)

#######################################

# class A():

# str = "http://127.0.0.1:8000/stark/app01/book/?publish=1&author=5"

#######################################
# class A(object):
#     pass
# 
# class B(A):
#     pass
# 
# b = B()
# print(isinstance(b,A)) # True
# print(isinstance(b,B)) # True

test.py

3、目录结构

4、github代码

github代码 : https://github.com/venicid/stark-Xadmin

xadmin-easy   https://github.com/venicid/Xadmin-easy

原始版

  https://github.com/alice-bj/stark_pro_0

简洁版

  https://github.com/alice-bj/stark_admin

原文地址:https://www.cnblogs.com/venicid/p/9534483.html