zoukankan      html  css  js  c++  java
  • 10.8Xadmin url注册

    2018-10-8 16:45:31

    这两天在弄我的服务器,就是是看各种教程 死活部署不好我的Django项目 博客网站

    过几天再弄!

    越努力,越幸运!永远不要高估自己!

    通过两个方法,通过类变量找到字符串和app名字

     url的注册和分发!!

    主要看用户怎样访问的!!!  xadmin 采用了面向对象! 两个类互相调用方法!

    放上源码,.自己体会

    url.py

    """s10day83 URL Configuration
    
    The `urlpatterns` list routes URLs to views. For more information please see:
        https://docs.djangoproject.com/en/1.11/topics/http/urls/
    Examples:
    Function views
        1. Add an import:  from my_app import views
        2. Add a URL to urlpatterns:  url(r'^$', views.home, name='home')
    Class-based views
        1. Add an import:  from other_app.views import Home
        2. Add a URL to urlpatterns:  url(r'^$', Home.as_view(), name='home')
    Including another URLconf
        1. Import the include() function: from django.conf.urls import url, include
        2. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))
    """
    from django.conf.urls import url
    from django.contrib import admin
    
    
    from Xadmin.service.Xadmin import site
    urlpatterns = [
        url(r'^admin/',  admin.site.urls),
        url(r'^Xadmin/', site.urls),  
      # url(r'^xx/', xxx) xxx部分要么是视图函数,要么得放([], none,none)分发url 正如上面site.urls执行这个方法
      # 返回的正好是一个元组
    ([], none,none) 所以可以执行
    # django 启动的时候这个模块直接被加载,site.urls 是调用静态方法 urls是类里面的静态方法,调用的时候不需要在后面加()

    ]

    Xadmin.py

    from django.conf.urls import url
    from django.shortcuts import HttpResponse,render,redirect
    class ModelXadmin(object):
        def __init__(self,model,site):
    
            self.model=model
            self.site=site
    
        def list_view(self, request):
            # self.model 指代了用户当前要访问的表
            print("self.model",self.model)
    
            data_list=self.model.objects.all()
            print("data_list",data_list)
            return render(request, 'list_view.html',{"data_list":data_list})
    
        def add_view(self, request):
            return render(request, 'add_view.html')
    
        def change_view(self, request, id):
            return render(request, 'change_view.html')
    
        def delete_view(self, request, id):
            return render(request, 'delete_view.html')
    
        def get_urls2(self):
            temp = []
    
            temp.append(url(r"^$", self.list_view))
            temp.append(url(r"^add/$", self.add_view))
            temp.append(url(r"^(d+)/change/$", self.change_view))
            temp.append(url(r"^(d+)/delete/$", self.delete_view))
    
            return temp
    
        @property
        def urls2(self):
            return self.get_urls2(), None, None
    
    
    class XadminSite(object):
        def __init__(self, name='admin'):
            self._registry = {}
    
    
        def get_urls(self):
    
            print(self._registry)  # {Book:modelAdmin(Book),.......}
    
            temp = []
            for model, admin_class_obj in self._registry.items():
           # 获取当前循环的model的字符串与所在app的名字 app_name
    = model._meta.app_label  # "app01" model_name = model._meta.model_name # "book" temp.append(url(r'^{0}/{1}/'.format(app_name, model_name), admin_class_obj.urls2), ) ''' 当用户访问的时候,看到指的谁 url(r"app01/book",ModelXadmin(Book,site).urls2) url(r"app01/publish",ModelXadmin(Publish,site).urls2) url(r"app02/order",ModelXadmin(Order,site).urls2) ''' return temp @property def urls(self): return self.get_urls(),None,None def register(self, model, admin_class=None, **options): if not admin_class: admin_class = ModelXadmin self._registry[model] = admin_class(model, self) # {Book:ModelAdmin(Book),Publish:ModelAdmin(Publish)} site=XadminSite()

    在Django一启动,就构建好了! 每一个分发都构建一个内存空间! 

  • 相关阅读:
    【NOIP模拟赛】正方形大阵
    【优化王牌】二分查找
    【Ah20160703】咏叹 By C_SUNSHINE
    【NOIP模拟赛】lover——心上人
    【小奇模拟赛】小奇挖矿2
    【NOIP模拟赛】工资
    关于博客装修的说明
    【快速处理】分块算法
    【集训】 考试笔记
    【HDNOIP】HD201404最短路径
  • 原文地址:https://www.cnblogs.com/zhen1996/p/9755347.html
Copyright © 2011-2022 走看看