Django 사용자 정의 첨삭 검사 구성 요소

4404 단어
목표: 추가 삭제 및 수정 구성 요소
지식 비축: 1.어떻게 django 자체 관리자를 사용합니까
  • models.py 생성 클래스
  • admin.py등록admin.site.register(models.UserInfo)
  • urls.py 라우팅 구성admin -> admin.site.urls
  • 2. 라우팅 시스템
    /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)
    

    시작 파일 루트 시스템 단일 모드 대상 계승 및 봉인

    좋은 웹페이지 즐겨찾기