Django 사용자 정의 첨삭 검사 구성 요소
지식 비축: 1.어떻게 django 자체 관리자를 사용합니까
admin.site.register(models.UserInfo)
admin -> admin.site.urls
/index/ index,name=n1
/index/(\d+)/ index,name=n2
/web/ include('app01.urls')
역방향 찾기
views.py :
reverse('n1')
reverse('n2',args=(666,))
:
{% url 'n1' %}
{% url 'n2' 666 %}
3. 파일을 처음 가져온 후 다시 가져올 때 다시 불러오지 않음
4. 객체 대상(패키지, 상속) 예:
class Base(object):
def __init__(self,val):
self.val = val
def func(self):
self.test()
print(self.val)
def test(self):
print('base.test')
class Foo(Base):
def test(self):
print('foo.test')
class Bar(object):
def __init__(self):
self._registry = {}
def register(self,a,b=None):
if not b:
b = Base
self._registry[a] = b(a)
b = Bar()
b.register(1,Foo)
b.register(2)
print(b._registry) #{1: <__main__.foo object="" at="">, 2: <__main__.base object="" at="">}
b._registry[1].func() # foo.test 1
b._registry[2].func() # base.test 2
django.admin 라우팅 규칙:
/admin/app01/role/
/admin/app01/role/add/
/admin/app01/role/2/change/
/admin/app01/role/2/delete/
/admin/app01/userinfo/
/admin/app01/userinfo/add/
/admin/app01/userinfo/1/change/
어떻게 사용하는가:
http://www.jianshu.com/p/c09be21c7ece
원리: 루트 관계 + 대응하는 보기 함수admin 원본 프로세스admin.py 1.프로그램을 실행하고 모든 app의 admin.py
파일을 찾아 불러옵니다 2.만들기admin.site
의 대상site = AdminSite()
3.실행 대상의 register
방법, 목적: 등록 클래스가 _registry
에 추가된admin을 말한다.site는 패키지된 객체(단일 모드 생성)입니다._registry = {
models.Role: ModelAdmin(models.Role,admin.site),
models.UserInfo: ModelAdmin(models.UserInfo,admin.site)
models.UserType: ModelAdmin(models.UserType,admin.site)
}
urls.py에서 admin을 다시 호출합니다.site 객체의 urls 속성:
urlpatterns = [
url(r'^admin/', admin.site.urls),
]
소스 코드의 두 가지 주요 클래스:
class ModelAdmin(object):
def __init__(self, model_class, site):
self.model_class = model_class
self.site = site
def changelist_view(self, request):
data_list = self.model_class.objects.all()
return HttpResponse(' ')
def add_view(self, request):
return HttpResponse(' ')
def delete_view(self, request, nid):
return HttpResponse(' ')
def change_view(self, request, nid):
return HttpResponse(' ')
def get_urls(self):
urlpatterns = [
url(r'^$', self.changelist_view),
url(r'^add/$', self.add_view),
url(r'^(.+)/delete/$', self.delete_view),
url(r'^(.+)/change/$', self.change_view),
]
return urlpatterns
@property
def urls(self):
return self.get_urls()
class AdminSite(object):
def __init__(self):
self._registry = {}
def register(self, model_class, model_admin):
self._registry[model_class] = model_admin(model_class, self)
def get_urls(self):
"""
models.Role: ModelAdmin(models.Role,admin.site),
models.UserInfo: ModelAdmin(models.UserInfo,admin.site)
models.UserType: ModelAdmin(models.UserType,admin.site)
models.Article: ModelAdmin(models.Article,admin.site)
"""
url_list = []
for model_class, model_admin in self._registry.items():
app_name = model_class._meta.app_label
model_name = model_class._meta.model_name
url_list += [
url('%s/%s' % (app_name, model_name,), include(model_admin.urls))
]
return url_list
@property
def urls(self):
return (self.get_urls(), None, None)
시작 파일 루트 시스템 단일 모드 대상 계승 및 봉인
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.