• url分发


    from django.db import models
    
    # Create your models here.
    
    class Author(models.Model):
        nid = models.AutoField(primary_key=True)
        name=models.CharField( max_length=32)
        age=models.IntegerField()
    
        # 与AuthorDetail建立一对一的关系
        authorDetail=models.OneToOneField(to="AuthorDetail",on_delete=models.CASCADE)
        def __str__(self):
            return self.name
    
    class AuthorDetail(models.Model):
    
        nid = models.AutoField(primary_key=True)
        birthday=models.DateField()
        telephone=models.BigIntegerField()
        addr=models.CharField( max_length=64)
    
    class Publish(models.Model):
        nid = models.AutoField(primary_key=True)
        name=models.CharField( max_length=32)
        city=models.CharField( max_length=32)
        email=models.EmailField()
    
        def __str__(self):
            return self.name
    
    class Book(models.Model):
    
        nid = models.AutoField(primary_key=True)
        title = models.CharField( max_length=32)
        publishDate=models.DateField()
        price=models.DecimalField(max_digits=5,decimal_places=2)
    
        # 与Publish建立一对多的关系,外键字段建立在多的一方
        publish=models.ForeignKey(to="Publish",to_field="nid",on_delete=models.CASCADE)
        # 与Author表建立多对多的关系,ManyToManyField可以建在两个模型中的任意一个,自动创建第三张表
        authors=models.ManyToManyField(to='Author',)
    
        def __str__(self):
            return self.title
    app01/models.py 
    from django.db import models
    
    # Create your models here.
    
    class Order(models.Model):
        title=models.CharField(max_length=32)
    app02/models.py 

    一、url分发

    def test01(request):
        return HttpResponse("test01")
    
    def test02(request):
        return HttpResponse("test02")
    
    def test03(request):
        return HttpResponse("test03")
    
    def test04(request):
        return HttpResponse("test04")
    
    def test05(request):
        return HttpResponse("test05")

    1、一级分发

    urlpatterns = [
        url(r'^Xadmin/',([
                url(r'^test01/',test01),
                url(r'^test02/', test02),
                url(r'^test03/', test03),
                    ],None,None))
    ]

    2、二级分发

    urlpatterns = [
    
        url("^Xadmin/", ([
             url(r'^test01/', ([
                        url(r'^test04/', test04),
                        url(r'^test05/', test05),
                            ], None, None)),
    
             url(r'^test02/', test02),
             url(r'^test03/', test03),
                   ], None, None)),
    ]

    上面把url路径写死了

    我们注册的模型表都存放在admin.site._registry

    通过类能拿到它所在app的名字和它模型表的名字

    例:

     

     3、修改后的一级路由

        url(r'^Xadmin/', (get_urls(),None,None)),
    def get_urls():
        print(admin.site._registry)  # {Book:modelAdmin(Book),.......}
    
        temp=[]
        for model,admin_class_obj in admin.site._registry.items():
            app_name=model._meta.app_label
            model_name=model._meta.model_name
    
            temp.append(url(r'^{0}/{1}/'.format(app_name,model_name), test01,)
    
        return temp

       

    4、修改后的二级路由 (对每一个模型表进行增删改查)

        url(r'^Xadmin/', (get_urls(),None,None)),
    def get_urls():
        print(admin.site._registry)  # {Book:modelAdmin(Book),.......}
    
    
        temp=[]
        for model,admin_class_obj in admin.site._registry.items():
            app_name=model._meta.app_label
            model_name=model._meta.model_name
    
            temp.append(url(r'^{0}/{1}/'.format(app_name,model_name), (get_urls_2(),None,None)),)
    
        return temp
    
    def get_urls_2():
    
        temp=[]
    
        temp.append(url(r"^$",list_view))
        temp.append(url(r"^add/$",add_view))
        temp.append(url(r"^(d+)/change/$",change_view))
        temp.append(url(r"^(d+)/delete/$",delete_view))
    
    
        return temp

    增删改查的视图函数:

    def list_view(request):
        return HttpResponse("list_view")
    
    def add_view(request):
        return HttpResponse("add_view")
    
    def change_view(request,id):
        return HttpResponse("change_view")
    
    def delete_view(request,id):
        return HttpResponse("delete_view")

     

     经过二级分发的设置,我们就设计出了4(增删改查)x7(AuthorAuthordetailPublishookOrderauth_groupauth_user)=28个url路径

  • 相关阅读:
    Zookeeper ZAB 协议分析
    Docker技术快速精通指南
    Oracle闪回技术详解
    怎样打造一个分布式数据库
    使用js冒泡实现点击空白处关闭弹窗
    也谈谈我对Docker的简单理解
    Docker技术快速精通指南
    Oracle优化网上常见的5个错误观点
    使用Spring AOP实现MySQL读写分离
    RESTEASY ,从学会使用到了解原理。
  • 原文地址:https://www.cnblogs.com/zh-xiaoyuan/p/12867815.html
Copyright © 2020-2023  润新知